SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
UNIVERSIDAD DE LAS AMÉRICAS PUEBLA
“Triggers”
Dr.José Luis Zechinelli Martini
Integrantes
David Águila Valencia ID 141026
Luis Alejandro Lazcano Gonzales ID140384
Edgar Jair Gutiérrez Granados ID 140851
Primavera 2013
Resumen
Se ejecutaron y compilaron una serie de instrucciones junto con los “triggers” o
“disparadores” en el programa de bases de datos de Orcacle (Oracle sqldeveloper) con el
fin de entender y comprender de qué manera se crean los triggers y distinguir las
restricciones que pueden tenerse en una base de datos.
Introducción
El disparador o triggeres una unidad de PL / SQL que se almacena en la base de datos y
(si está activado o desactivado), se ejecuta automáticamente en respuesta a un evento
especificado.
Los disparadores tienen la siguiente estructura:
TRIGGER nombre_del_trigger
triggering_evento
[restricción_del_trigger]
BEGIN
accion_del_trigger;
END;
Nombre_del_trigger, debe de ser único, no debe de haber dos disparadores con un
mismo nombre, en caso de que lo haya, mandara un mensaje de error diciéndote que el
nombre con ese disparador ya fue creado o compilado.
Triggering_evento, aquí ira sobre que base de datos funcionara para activar la
siguiente instruccion.
Acción_del_trigger, aquí van las instrucciones de lo que hara nuestro disparador en
caso de que la restricción sea o no valida, las acciones van a manipular nuestros datos.
Resultados
Para la practica se ejecutaron las instrucciones de “schema1.sql” en Oracle sqldeveloper
dándonos las siguiente tablas:
Al ejecutar las pruebas paso lo siguiente:
INSERT INTO deptoVALUES(1, 'uno', 'puebla', 0);
Esto nos da un error debido a que la ciudad de puebla no esta
dada por alta previamente, y solo acepta las ciudades de
“parís”,”grenoble” y “lyon”
INSERT INTO deptoVALUES(1, 'uno', 'paris', 0);
En esta prueba la inserción fue llevada a cabo correctamente
debido a que la localización insertada fue “parís” y esta dentro
del rango.
INSERT INTO deptoVALUES(2, 'uno', 'paris', 0);
Esta inserción no se llevara a cabo debido a que ya existe un
departamento con el nombre “uno” y con el nombre de “parís”.
Las siguientes instrucciones se llevaran a cabo correctamente
INSERT INTO employee VALUES(1, 'vargas', 'enseignant', 1000,
'11-DEC-98', 'x', 1);
INSERT INTO employee VALUES(2, 'dupont', 'secretaire', 1000,
'11-NOV-98', 'x', 1);
A excepción de la siguiente
INSERT INTO employee VALUES(3, 'dupont', 'enseignant', 1000,
'11-NOV-98', 'x', 2);
Yaque el numero „2‟ al final delregistro, no
existeningundepartamento con estenumero, por lo tanto no se
insertara
En la siguiente instrucción:
DELETE depto WHERE deptnum = 1;
Se eliminara el departamento con el numero 1, además de que se
hará un eliminado de cascada, es decir que cualquier empleado
asociado a este departamento también se eliminara.
Se crea el trigger siguiente
CREATE TRIGGER t1
BEFORE UPDATE ON employee
FOR EACH ROW
BEGIN
:new.datemaj := sysdate;
END;
Antes de insertar un registro en la tabla de empleados se le agrega la
fecha actual para cada registro, en la siguiente instrucción se prueba el
trigger:
select * from employee;
update EMPLOYEE set job = 'nouvelle' where empnum = 7369;
select * from employee;
Aquí se observa la tabla despues de aplicar las instrucciones
Despues de actualizar la tabla, el disparador 1 actualizo la fecha
en que se modifico y la instrucción cmabio el trabajo de “Clerk” a
“nouvelle”.
Al ejecutar el siguiente trigger t2
CREATE TRIGGER t2
BEFORE INSERT ON employee
FOR EACH ROW
WHEN (new.deptnum IS NOT NULL)
DECLARE x NUMBER;
BEGIN
SELECT count(*) INTO x
FROM depto WHERE deptnum=:new.deptnum;
IF x = 0 THEN INSERT INTO depto
values(:new.deptnum,'????','paris',1);
END IF;
END;
Lo que hace es que al no existir un departamento crea uno, se puede ver en la siguiente
instrucción:
insert into employee values(7938,'martin','ENSEIGe', 7566,'30-
JUN-98', „KRONOS‟, 90);
dando como resultado el siguiente:
Se compila el siguiente trigger
CREATE TRIGGER t7
AFTER INSERT OR DELETE OR UPDATE OF deptnum ON employee
FOR EACH ROW
DECLARE x NUMBER;
BEGIN
IF ((INSERTING) AND :new.deptnum IS NOT NULL) THEN
SELECT count(*) INTO x
FROM depto WHERE deptnum=:new.deptnum;
IF x = 0 THEN INSERT INTO deptovalues(:new.deptnum,
'????','paris',1);
ELSE UPDATE depto SET nemp = nemp +1 WHERE deptnum
:new.deptnum;
END IF;
END IF;
IF ((DELETING) AND :old.deptnum IS NOT NULL) THEN
UPDATE depto SET nemp = nemp -1 WHERE deptnum = :old.deptnum;
END IF;
END;
Lo que hace es modificar el numero de la columna “nemp”, se puede ver el resultado en la
siguiente imagen:
Se ve que al agregar los dos empleados de las siguientes instrucciones
insert into employee values(7935, 'VARGAS', 'ANALYST', 7566, NULL,
'KRONOS', 40);
insert into employee values(7936, 'WALTER', 'ANALYST', 7566, NULL,
'KRONOS', 20);
El siguiente triger ayuda al usuario a modificiar todos los datos de los empleados cuando
se modifica el numero del departamento, es decir cambiara el numero del empleado que
estaba en ese departamento al mismo numero
CREATE TRIGGER t3
AFTER UPDATE OF deptnum ON depto
FOR EACH ROW
BEGIN
IF :old.deptnum != :new.deptnum THEN
UPDATE employee SET employee.deptnum= :new.deptnum
WHERE employee.deptnum= :old.deptnum;
END IF;
END;
Lo que hace el siguiente trigger es que si eliminamos algun departamento, los empleados
que tengan el numero de departamento igual, lo hara “null”
CREATE TRIGGER t4
BEFORE DELETE ON depto
FOR EACH ROW
BEGIN
UPDATE employee SET employee.deptnum = NULL
WHERE employee.deptnum = :old.deptnum;
END;
Los resultados del trigger 4 fueron los siguientes:
creación de un nuevo departamento
Creación de un empleado con el departamento “80”
Al eliminar el departamento con el numero 80, se pone en blanco o en null el
numero de departamento que ya no existe.
El siguiente trigger
CREATE TRIGGER t5
BEFORE INSERT OR DELETE OR UPDATE OF deptnum ON employee
FOR EACH ROW
DECLARE
dummy INTEGER;
emp_present EXCEPTION;
emp_non_present EXCEPTION;
invalid_department EXCEPTION;
valid_departmentEXCEPTION;
mutating_table EXCEPTION;
CURSOR dummy_cursor (dn NUMBER) IS
SELECT deptnum
FROM depto
WHERE deptnum = dn;
BEGIN
OPEN dummy_cursor(:new.deptnum);
FETCH dummy_cursor INTO dummy;
IF dummy_cursor %NOTFOUND THEN
RAISE invalid_department;
ELSE RAISE valid_department;
END IF;
EXCEPTION
WHEN invalid_department THEN
RAISE_APPLICATION_ERROR(-20000,'Numero
departementinvalide '|| TO_CHAR(:new.deptnum));
CLOSE dummy_cursor;
WHEN valid_department THEN CLOSE dummy_cursor;
WHEN mutating_table THEN NULL;
END;
Lo que hara es que si ahora se requiere unsertar un empleado, con un numero de
departamento, lo que hara es comparar cada numero si existe en la tabla de
departamentos, si lo encuentra, se insertara, si no, no se insertara nada.
Lo que hace el trigger 8 es que ningún departamento que se vaya a suprimir tenga
personas asociadas. Se declaran unos valores para la comparación del mismo.
CREATE TRIGGER t8
BEFORE DELETE OR UPDATE OF deptnum ON depto
FOR EACH ROW
DECLARE
dummy INTEGER;
emp_present EXCEPTION;
emp_non_present EXCEPTION;
CURSOR dummy_cursor (dn NUMBER) IS
SELECT deptnum
FROM employee
WHERE deptnum = dn;
BEGIN
OPEN dummy_cursor(:old.deptnum);
FETCH dummy_cursor INTO dummy;
IF dummy_cursor %FOUND THEN
RAISE emp_present;
ELSE RAISE emp_non_present;
END IF;
EXCEPTION
WHEN emp_present THEN
RAISE_APPLICATION_ERROR(-20001,'Empleados en estedepartemento :
'|| TO_CHAR(:old.deptnum));
CLOSE dummy_cursor;
WHEN emp_non_present THEN CLOSE dummy_cursor;
END;
Ejecutando las pruebas se ve lo siguiente:
Se agrego el departamento no 81, que tiene 1 numero de empleados, al ejecutar la
siguiente instrucción:
deletedepto where deptnum = 81;
nos aparece un mensaje, debido al disparador 8
El siguiente disparador funcionara sobre la tabla empleados, cada ves que se
ponga su salario, el salario no debe de ser menor a 5,000
CREATE TRIGGER t9
BEFORE UPDATE OF sal ON employee
FOR EACH ROW
WHEN (new.sal> 5000)
BEGIN
INSERT INTO avert values(employee.empno, employee.sal);
END;
Ejecutando la siguiente línea
update employee set sal = 6000 where empno = 7936;
Lo modificara correctamente, sin que nos mencione algun mensaje, en caso si
hubiera sido este caso:
update employee set sal = 4999 where empno = 7936;
Se activa el disparador y no modifica nada.
Para el siguiente trigger se creo la siguiente tabla:
Y en trigger siguiente
CREATE TRIGGER t10
BEFORE INSERT OR UPDATE OF sal ON employee
FOR EACH ROW
DECLARE
maxsal NUMBER;
x NUMBER;
salaire_max EXCEPTION;
BEGIN
IF ( (UPDATING) AND :new.job != 'MANAGER') THEN
SELECT sal INTO maxsal FROM dirsal
WHERE deptnum = :old.deptnum;
IF (:new.sal>= maxsal) THEN
RAISE salaire_max;
END IF;
END IF;
IF ((UPDATING OR INSERTING) AND :new.job = 'MANAGER') THEN
UPDATE dirsal SET sal= :new.sal;
END IF;
EXCEPTION
WHEN salaire_max THEN
raise_application_error(-20002,'salario ' ||
TO_CHAR(:new.sal) || 'FF superior al de MANAGER' ||
TO_CHAR(maxsal) || 'FF paraempleado ' || TO_CHAR(:new.empnum));
END;
Este trigger lo que hace es antes de insertar o actualizar un salario en la tabla de
empleados es comparar el salario máximo que tiene cada uno en la tabla DIRSAL, si
alguno supera el salario la inserción o actualización no se hace.
update employee set sal = 8000 where empnum = 7900;
Al ejecutar la prueba, no lo actualizara, debido a que el empleado 7900, es un
secretario, y el secretario no debe de ganar mas de 7839.
El siguiente trigger lo que hace es que no se puede modificar, insertar, o actualizar
información fuera de horas de trabajo y fines de semana, apareciendo una
modificación no valida.
CREATE TRIGGER t12
BEFORE INSERT OR DELETE OR UPDATE ON employee
DECLARE
weekends EXCEPTION;
hora_trabajo EXCEPTION;
heure_travail EXCEPTION;
BEGIN
IF( TO_CHAR(SYSDATE,'DY') = 'SAT' OR
TO_CHAR(SYSDATE,'DY') = 'SUN' ) THEN
RAISE weekends;
END IF;
IF( TO_CHAR(SYSDATE,'HH24') < 12 OR
TO_CHAR(SYSDATE,'HH24') > 13 ) THEN
RAISE hora_trabajo;
END IF;
EXCEPTION
WHEN weekends THEN
RAISE_APPLICATION_ERROR (-20005,'Modificacion
invalidadurante los fines de semana !');
WHEN heure_travail THEN
RAISE_APPLICATION_ERROR (-20006,'Modification
invalidafuera de lashoras de trabajo !');
END;

Mais conteúdo relacionado

Mais procurados (19)

Práctica individual Rafael Hernandez
Práctica individual Rafael HernandezPráctica individual Rafael Hernandez
Práctica individual Rafael Hernandez
 
TABLA DE COMANDO /SENTENCIAS/PAQUETES
TABLA DE COMANDO /SENTENCIAS/PAQUETESTABLA DE COMANDO /SENTENCIAS/PAQUETES
TABLA DE COMANDO /SENTENCIAS/PAQUETES
 
Informe 22
Informe 22Informe 22
Informe 22
 
Trigger Data Base
Trigger Data BaseTrigger Data Base
Trigger Data Base
 
JERARQUÍA de operaciones
JERARQUÍA de operaciones JERARQUÍA de operaciones
JERARQUÍA de operaciones
 
Tarea 8 consultas
Tarea 8 consultasTarea 8 consultas
Tarea 8 consultas
 
Manual del usuario
Manual del usuarioManual del usuario
Manual del usuario
 
Guia estructuras cíclicas
Guia estructuras cíclicasGuia estructuras cíclicas
Guia estructuras cíclicas
 
Solver
SolverSolver
Solver
 
Estructuras repetitivas for y while
Estructuras repetitivas for y whileEstructuras repetitivas for y while
Estructuras repetitivas for y while
 
Introducción A Las Estructuras De Seleccion En C
Introducción A Las Estructuras De Seleccion En CIntroducción A Las Estructuras De Seleccion En C
Introducción A Las Estructuras De Seleccion En C
 
Expo métodos
Expo métodosExpo métodos
Expo métodos
 
Visual fotos desde base de datos Access
Visual fotos desde base de datos AccessVisual fotos desde base de datos Access
Visual fotos desde base de datos Access
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Estructura repetitiva for y while
Estructura repetitiva for y whileEstructura repetitiva for y while
Estructura repetitiva for y while
 
Respuesta taller semana_4_ salud ocupacional
Respuesta taller semana_4_ salud ocupacionalRespuesta taller semana_4_ salud ocupacional
Respuesta taller semana_4_ salud ocupacional
 
Ayuda la clase statement
Ayuda la clase statementAyuda la clase statement
Ayuda la clase statement
 
C++
C++C++
C++
 

Semelhante a Triggers en SQL

Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlTitiushko Jazz
 
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlTitiushko Jazz
 
ORACLE EJERCICIO LABORATORIO
ORACLE EJERCICIO LABORATORIOORACLE EJERCICIO LABORATORIO
ORACLE EJERCICIO LABORATORIOSefira111
 
Ejercicio Práctico de Base de Datos
Ejercicio Práctico de Base de DatosEjercicio Práctico de Base de Datos
Ejercicio Práctico de Base de DatosPilar Pardo Hidalgo
 
Manualitosqlserver
ManualitosqlserverManualitosqlserver
ManualitosqlserverOca srl
 
Actualización de bases de datos en MySQL
Actualización de bases de datos en MySQLActualización de bases de datos en MySQL
Actualización de bases de datos en MySQLalexmerono
 
Complemento del manual de programacion iii sql
Complemento del manual de programacion iii sqlComplemento del manual de programacion iii sql
Complemento del manual de programacion iii sqlLaura Miranda Dominguez
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresEdwin Romero
 
Arreglo unidimensionales y bidimensionales
Arreglo unidimensionales y bidimensionalesArreglo unidimensionales y bidimensionales
Arreglo unidimensionales y bidimensionalesMarco Garay
 
1.2.2 incorporando sentencias dml y funciones sql a bloques plsql
1.2.2 incorporando sentencias dml y funciones sql a bloques plsql1.2.2 incorporando sentencias dml y funciones sql a bloques plsql
1.2.2 incorporando sentencias dml y funciones sql a bloques plsqlRicardo Riquelme Pinto
 
Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Jair Ospino Ardila
 

Semelhante a Triggers en SQL (20)

Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sql
 
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sql
 
Ejercicios resueltos de_pl-sql
Ejercicios resueltos de_pl-sqlEjercicios resueltos de_pl-sql
Ejercicios resueltos de_pl-sql
 
Replica
ReplicaReplica
Replica
 
ORACLE EJERCICIO LABORATORIO
ORACLE EJERCICIO LABORATORIOORACLE EJERCICIO LABORATORIO
ORACLE EJERCICIO LABORATORIO
 
Ejemplos u4
Ejemplos u4Ejemplos u4
Ejemplos u4
 
Ejercicio Práctico de Base de Datos
Ejercicio Práctico de Base de DatosEjercicio Práctico de Base de Datos
Ejercicio Práctico de Base de Datos
 
Manualitosqlserver
ManualitosqlserverManualitosqlserver
Manualitosqlserver
 
Sql2
Sql2Sql2
Sql2
 
Tarea
TareaTarea
Tarea
 
Actualización de bases de datos en MySQL
Actualización de bases de datos en MySQLActualización de bases de datos en MySQL
Actualización de bases de datos en MySQL
 
TRIGGERS-ACTIVADORES
TRIGGERS-ACTIVADORESTRIGGERS-ACTIVADORES
TRIGGERS-ACTIVADORES
 
TRIGGER-ACTIVADORES
TRIGGER-ACTIVADORESTRIGGER-ACTIVADORES
TRIGGER-ACTIVADORES
 
Guia de ejercicios para resolver sql
Guia de ejercicios para resolver sqlGuia de ejercicios para resolver sql
Guia de ejercicios para resolver sql
 
Complemento del manual de programacion iii sql
Complemento del manual de programacion iii sqlComplemento del manual de programacion iii sql
Complemento del manual de programacion iii sql
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursores
 
Arreglo unidimensionales y bidimensionales
Arreglo unidimensionales y bidimensionalesArreglo unidimensionales y bidimensionales
Arreglo unidimensionales y bidimensionales
 
1.2.2 incorporando sentencias dml y funciones sql a bloques plsql
1.2.2 incorporando sentencias dml y funciones sql a bloques plsql1.2.2 incorporando sentencias dml y funciones sql a bloques plsql
1.2.2 incorporando sentencias dml y funciones sql a bloques plsql
 
Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL
 
Funciones de Agregacion
Funciones de AgregacionFunciones de Agregacion
Funciones de Agregacion
 

Mais de David Aguila

Ihc prototipo de alta fidelidad-final
Ihc   prototipo de alta fidelidad-finalIhc   prototipo de alta fidelidad-final
Ihc prototipo de alta fidelidad-finalDavid Aguila
 
Ihc prototipo de alta fidelidad
Ihc   prototipo de alta fidelidadIhc   prototipo de alta fidelidad
Ihc prototipo de alta fidelidadDavid Aguila
 
Prototipo de baja fidelidad
Prototipo de baja fidelidadPrototipo de baja fidelidad
Prototipo de baja fidelidadDavid Aguila
 
Prototipo de baja fidelidad
Prototipo de baja fidelidadPrototipo de baja fidelidad
Prototipo de baja fidelidadDavid Aguila
 
Paradigmas y estilos de interaccion
Paradigmas y estilos de interaccionParadigmas y estilos de interaccion
Paradigmas y estilos de interaccionDavid Aguila
 
Reporte como sujetos de estudio de usabilidad
Reporte como sujetos de estudio de usabilidad  Reporte como sujetos de estudio de usabilidad
Reporte como sujetos de estudio de usabilidad David Aguila
 
Método heurístico final
Método heurístico finalMétodo heurístico final
Método heurístico finalDavid Aguila
 
Evaluacion Cuantitativa GOMS
Evaluacion Cuantitativa GOMSEvaluacion Cuantitativa GOMS
Evaluacion Cuantitativa GOMSDavid Aguila
 
Metodo de evaluacion a REMERI
Metodo de evaluacion a REMERIMetodo de evaluacion a REMERI
Metodo de evaluacion a REMERIDavid Aguila
 
Evaluacion heuristica
Evaluacion heuristicaEvaluacion heuristica
Evaluacion heuristicaDavid Aguila
 
Estudio de usabilidad aplicado a REMERI
Estudio de usabilidad aplicado a REMERIEstudio de usabilidad aplicado a REMERI
Estudio de usabilidad aplicado a REMERIDavid Aguila
 
Evaluacion de accesibilidad
Evaluacion de accesibilidadEvaluacion de accesibilidad
Evaluacion de accesibilidadDavid Aguila
 
Desarrollo del blog celulas madre
Desarrollo del blog celulas madreDesarrollo del blog celulas madre
Desarrollo del blog celulas madreDavid Aguila
 

Mais de David Aguila (13)

Ihc prototipo de alta fidelidad-final
Ihc   prototipo de alta fidelidad-finalIhc   prototipo de alta fidelidad-final
Ihc prototipo de alta fidelidad-final
 
Ihc prototipo de alta fidelidad
Ihc   prototipo de alta fidelidadIhc   prototipo de alta fidelidad
Ihc prototipo de alta fidelidad
 
Prototipo de baja fidelidad
Prototipo de baja fidelidadPrototipo de baja fidelidad
Prototipo de baja fidelidad
 
Prototipo de baja fidelidad
Prototipo de baja fidelidadPrototipo de baja fidelidad
Prototipo de baja fidelidad
 
Paradigmas y estilos de interaccion
Paradigmas y estilos de interaccionParadigmas y estilos de interaccion
Paradigmas y estilos de interaccion
 
Reporte como sujetos de estudio de usabilidad
Reporte como sujetos de estudio de usabilidad  Reporte como sujetos de estudio de usabilidad
Reporte como sujetos de estudio de usabilidad
 
Método heurístico final
Método heurístico finalMétodo heurístico final
Método heurístico final
 
Evaluacion Cuantitativa GOMS
Evaluacion Cuantitativa GOMSEvaluacion Cuantitativa GOMS
Evaluacion Cuantitativa GOMS
 
Metodo de evaluacion a REMERI
Metodo de evaluacion a REMERIMetodo de evaluacion a REMERI
Metodo de evaluacion a REMERI
 
Evaluacion heuristica
Evaluacion heuristicaEvaluacion heuristica
Evaluacion heuristica
 
Estudio de usabilidad aplicado a REMERI
Estudio de usabilidad aplicado a REMERIEstudio de usabilidad aplicado a REMERI
Estudio de usabilidad aplicado a REMERI
 
Evaluacion de accesibilidad
Evaluacion de accesibilidadEvaluacion de accesibilidad
Evaluacion de accesibilidad
 
Desarrollo del blog celulas madre
Desarrollo del blog celulas madreDesarrollo del blog celulas madre
Desarrollo del blog celulas madre
 

Último

Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskbydaniela5
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024anasofiarodriguezcru
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxBLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxhellendiaz12
 
Tecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaTecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaElizabethLpezSoto
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nóminacuellosameidy
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaYeimys Ch
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdflauralizcano0319
 
tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6SaraMineiropalacio
 
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfTENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfJoseAlejandroPerezBa
 
Trabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalTrabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalEmanuelCastro64
 
TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888ElianaValencia28
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 

Último (18)

Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxBLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
 
Tecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaTecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestría
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nómina
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
 
tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6
 
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfTENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
 
Trabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalTrabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamental
 
TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 

Triggers en SQL

  • 1. UNIVERSIDAD DE LAS AMÉRICAS PUEBLA “Triggers” Dr.José Luis Zechinelli Martini Integrantes David Águila Valencia ID 141026 Luis Alejandro Lazcano Gonzales ID140384 Edgar Jair Gutiérrez Granados ID 140851 Primavera 2013
  • 2. Resumen Se ejecutaron y compilaron una serie de instrucciones junto con los “triggers” o “disparadores” en el programa de bases de datos de Orcacle (Oracle sqldeveloper) con el fin de entender y comprender de qué manera se crean los triggers y distinguir las restricciones que pueden tenerse en una base de datos. Introducción El disparador o triggeres una unidad de PL / SQL que se almacena en la base de datos y (si está activado o desactivado), se ejecuta automáticamente en respuesta a un evento especificado. Los disparadores tienen la siguiente estructura: TRIGGER nombre_del_trigger triggering_evento [restricción_del_trigger] BEGIN accion_del_trigger; END; Nombre_del_trigger, debe de ser único, no debe de haber dos disparadores con un mismo nombre, en caso de que lo haya, mandara un mensaje de error diciéndote que el nombre con ese disparador ya fue creado o compilado. Triggering_evento, aquí ira sobre que base de datos funcionara para activar la siguiente instruccion. Acción_del_trigger, aquí van las instrucciones de lo que hara nuestro disparador en caso de que la restricción sea o no valida, las acciones van a manipular nuestros datos. Resultados Para la practica se ejecutaron las instrucciones de “schema1.sql” en Oracle sqldeveloper dándonos las siguiente tablas:
  • 3. Al ejecutar las pruebas paso lo siguiente: INSERT INTO deptoVALUES(1, 'uno', 'puebla', 0); Esto nos da un error debido a que la ciudad de puebla no esta dada por alta previamente, y solo acepta las ciudades de “parís”,”grenoble” y “lyon” INSERT INTO deptoVALUES(1, 'uno', 'paris', 0);
  • 4. En esta prueba la inserción fue llevada a cabo correctamente debido a que la localización insertada fue “parís” y esta dentro del rango. INSERT INTO deptoVALUES(2, 'uno', 'paris', 0); Esta inserción no se llevara a cabo debido a que ya existe un departamento con el nombre “uno” y con el nombre de “parís”. Las siguientes instrucciones se llevaran a cabo correctamente INSERT INTO employee VALUES(1, 'vargas', 'enseignant', 1000, '11-DEC-98', 'x', 1); INSERT INTO employee VALUES(2, 'dupont', 'secretaire', 1000, '11-NOV-98', 'x', 1); A excepción de la siguiente INSERT INTO employee VALUES(3, 'dupont', 'enseignant', 1000, '11-NOV-98', 'x', 2); Yaque el numero „2‟ al final delregistro, no existeningundepartamento con estenumero, por lo tanto no se insertara En la siguiente instrucción: DELETE depto WHERE deptnum = 1; Se eliminara el departamento con el numero 1, además de que se hará un eliminado de cascada, es decir que cualquier empleado asociado a este departamento también se eliminara.
  • 5. Se crea el trigger siguiente CREATE TRIGGER t1 BEFORE UPDATE ON employee FOR EACH ROW BEGIN :new.datemaj := sysdate; END; Antes de insertar un registro en la tabla de empleados se le agrega la fecha actual para cada registro, en la siguiente instrucción se prueba el trigger: select * from employee; update EMPLOYEE set job = 'nouvelle' where empnum = 7369; select * from employee; Aquí se observa la tabla despues de aplicar las instrucciones Despues de actualizar la tabla, el disparador 1 actualizo la fecha en que se modifico y la instrucción cmabio el trabajo de “Clerk” a “nouvelle”. Al ejecutar el siguiente trigger t2 CREATE TRIGGER t2 BEFORE INSERT ON employee FOR EACH ROW WHEN (new.deptnum IS NOT NULL) DECLARE x NUMBER; BEGIN SELECT count(*) INTO x FROM depto WHERE deptnum=:new.deptnum; IF x = 0 THEN INSERT INTO depto values(:new.deptnum,'????','paris',1); END IF; END; Lo que hace es que al no existir un departamento crea uno, se puede ver en la siguiente instrucción:
  • 6. insert into employee values(7938,'martin','ENSEIGe', 7566,'30- JUN-98', „KRONOS‟, 90); dando como resultado el siguiente: Se compila el siguiente trigger CREATE TRIGGER t7 AFTER INSERT OR DELETE OR UPDATE OF deptnum ON employee FOR EACH ROW DECLARE x NUMBER; BEGIN IF ((INSERTING) AND :new.deptnum IS NOT NULL) THEN SELECT count(*) INTO x FROM depto WHERE deptnum=:new.deptnum; IF x = 0 THEN INSERT INTO deptovalues(:new.deptnum, '????','paris',1); ELSE UPDATE depto SET nemp = nemp +1 WHERE deptnum :new.deptnum; END IF; END IF; IF ((DELETING) AND :old.deptnum IS NOT NULL) THEN UPDATE depto SET nemp = nemp -1 WHERE deptnum = :old.deptnum; END IF; END; Lo que hace es modificar el numero de la columna “nemp”, se puede ver el resultado en la siguiente imagen:
  • 7. Se ve que al agregar los dos empleados de las siguientes instrucciones insert into employee values(7935, 'VARGAS', 'ANALYST', 7566, NULL, 'KRONOS', 40); insert into employee values(7936, 'WALTER', 'ANALYST', 7566, NULL, 'KRONOS', 20); El siguiente triger ayuda al usuario a modificiar todos los datos de los empleados cuando se modifica el numero del departamento, es decir cambiara el numero del empleado que estaba en ese departamento al mismo numero CREATE TRIGGER t3 AFTER UPDATE OF deptnum ON depto FOR EACH ROW BEGIN IF :old.deptnum != :new.deptnum THEN UPDATE employee SET employee.deptnum= :new.deptnum WHERE employee.deptnum= :old.deptnum; END IF; END; Lo que hace el siguiente trigger es que si eliminamos algun departamento, los empleados que tengan el numero de departamento igual, lo hara “null” CREATE TRIGGER t4 BEFORE DELETE ON depto FOR EACH ROW BEGIN UPDATE employee SET employee.deptnum = NULL WHERE employee.deptnum = :old.deptnum; END; Los resultados del trigger 4 fueron los siguientes:
  • 8. creación de un nuevo departamento Creación de un empleado con el departamento “80” Al eliminar el departamento con el numero 80, se pone en blanco o en null el numero de departamento que ya no existe. El siguiente trigger CREATE TRIGGER t5 BEFORE INSERT OR DELETE OR UPDATE OF deptnum ON employee FOR EACH ROW DECLARE dummy INTEGER; emp_present EXCEPTION; emp_non_present EXCEPTION; invalid_department EXCEPTION; valid_departmentEXCEPTION; mutating_table EXCEPTION; CURSOR dummy_cursor (dn NUMBER) IS SELECT deptnum FROM depto WHERE deptnum = dn; BEGIN OPEN dummy_cursor(:new.deptnum); FETCH dummy_cursor INTO dummy; IF dummy_cursor %NOTFOUND THEN RAISE invalid_department; ELSE RAISE valid_department; END IF; EXCEPTION WHEN invalid_department THEN
  • 9. RAISE_APPLICATION_ERROR(-20000,'Numero departementinvalide '|| TO_CHAR(:new.deptnum)); CLOSE dummy_cursor; WHEN valid_department THEN CLOSE dummy_cursor; WHEN mutating_table THEN NULL; END; Lo que hara es que si ahora se requiere unsertar un empleado, con un numero de departamento, lo que hara es comparar cada numero si existe en la tabla de departamentos, si lo encuentra, se insertara, si no, no se insertara nada. Lo que hace el trigger 8 es que ningún departamento que se vaya a suprimir tenga personas asociadas. Se declaran unos valores para la comparación del mismo. CREATE TRIGGER t8 BEFORE DELETE OR UPDATE OF deptnum ON depto FOR EACH ROW DECLARE dummy INTEGER; emp_present EXCEPTION; emp_non_present EXCEPTION; CURSOR dummy_cursor (dn NUMBER) IS SELECT deptnum FROM employee WHERE deptnum = dn; BEGIN OPEN dummy_cursor(:old.deptnum); FETCH dummy_cursor INTO dummy; IF dummy_cursor %FOUND THEN RAISE emp_present; ELSE RAISE emp_non_present; END IF; EXCEPTION WHEN emp_present THEN RAISE_APPLICATION_ERROR(-20001,'Empleados en estedepartemento : '|| TO_CHAR(:old.deptnum)); CLOSE dummy_cursor; WHEN emp_non_present THEN CLOSE dummy_cursor; END; Ejecutando las pruebas se ve lo siguiente:
  • 10. Se agrego el departamento no 81, que tiene 1 numero de empleados, al ejecutar la siguiente instrucción: deletedepto where deptnum = 81; nos aparece un mensaje, debido al disparador 8 El siguiente disparador funcionara sobre la tabla empleados, cada ves que se ponga su salario, el salario no debe de ser menor a 5,000 CREATE TRIGGER t9 BEFORE UPDATE OF sal ON employee FOR EACH ROW WHEN (new.sal> 5000) BEGIN INSERT INTO avert values(employee.empno, employee.sal); END; Ejecutando la siguiente línea update employee set sal = 6000 where empno = 7936; Lo modificara correctamente, sin que nos mencione algun mensaje, en caso si hubiera sido este caso: update employee set sal = 4999 where empno = 7936; Se activa el disparador y no modifica nada.
  • 11. Para el siguiente trigger se creo la siguiente tabla: Y en trigger siguiente CREATE TRIGGER t10 BEFORE INSERT OR UPDATE OF sal ON employee FOR EACH ROW DECLARE maxsal NUMBER; x NUMBER; salaire_max EXCEPTION; BEGIN IF ( (UPDATING) AND :new.job != 'MANAGER') THEN SELECT sal INTO maxsal FROM dirsal WHERE deptnum = :old.deptnum; IF (:new.sal>= maxsal) THEN RAISE salaire_max; END IF; END IF; IF ((UPDATING OR INSERTING) AND :new.job = 'MANAGER') THEN UPDATE dirsal SET sal= :new.sal; END IF; EXCEPTION WHEN salaire_max THEN raise_application_error(-20002,'salario ' || TO_CHAR(:new.sal) || 'FF superior al de MANAGER' || TO_CHAR(maxsal) || 'FF paraempleado ' || TO_CHAR(:new.empnum)); END; Este trigger lo que hace es antes de insertar o actualizar un salario en la tabla de empleados es comparar el salario máximo que tiene cada uno en la tabla DIRSAL, si alguno supera el salario la inserción o actualización no se hace. update employee set sal = 8000 where empnum = 7900; Al ejecutar la prueba, no lo actualizara, debido a que el empleado 7900, es un secretario, y el secretario no debe de ganar mas de 7839.
  • 12. El siguiente trigger lo que hace es que no se puede modificar, insertar, o actualizar información fuera de horas de trabajo y fines de semana, apareciendo una modificación no valida. CREATE TRIGGER t12 BEFORE INSERT OR DELETE OR UPDATE ON employee DECLARE weekends EXCEPTION; hora_trabajo EXCEPTION; heure_travail EXCEPTION; BEGIN IF( TO_CHAR(SYSDATE,'DY') = 'SAT' OR TO_CHAR(SYSDATE,'DY') = 'SUN' ) THEN RAISE weekends; END IF; IF( TO_CHAR(SYSDATE,'HH24') < 12 OR TO_CHAR(SYSDATE,'HH24') > 13 ) THEN RAISE hora_trabajo; END IF; EXCEPTION WHEN weekends THEN RAISE_APPLICATION_ERROR (-20005,'Modificacion invalidadurante los fines de semana !'); WHEN heure_travail THEN RAISE_APPLICATION_ERROR (-20006,'Modification invalidafuera de lashoras de trabajo !'); END;