0% encontró este documento útil (0 votos)
98 vistas5 páginas

Trigger Dia 1 21 SOLUCIONES

El documento describe la creación de varios triggers en Oracle para registrar cambios en tablas de empleados. Se crea una tabla empleados_baja para almacenar registros de empleados dados de baja, e incluye triggers que insertan nuevos registros en esta tabla cuando se eliminan filas de la tabla empleados. Los triggers también se utilizan para actualizar salarios al insertar o modificar registros.

Cargado por

karolinecueva2
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
98 vistas5 páginas

Trigger Dia 1 21 SOLUCIONES

El documento describe la creación de varios triggers en Oracle para registrar cambios en tablas de empleados. Se crea una tabla empleados_baja para almacenar registros de empleados dados de baja, e incluye triggers que insertan nuevos registros en esta tabla cuando se eliminan filas de la tabla empleados. Los triggers también se utilizan para actualizar salarios al insertar o modificar registros.

Cargado por

karolinecueva2
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 5

TRIGGERS-1-SOLUCIONES

1. Crear una tabla empleados_baja con la siguiente estructura.

nremp de tipo varchar


jefe de tipo varchar
departamento de tipo entero
salario de tipo entero
usuario de tipo varchar
fecha de tipo fecha

La primary key es la concatención del campo nroemp y fecha.

Crear después un trigger que inserte una fila en la tabla empleados_baja


cuando se borre una fila en la tabla empleados.

– Los datos que se insertan en esta tabla son los relativos al empleado
que se da de baja en la tabla empleados, salvo en las columnas usuario y
fecha se grabarán las variables del sistema USER y SYSDATE que
almacenan el usuario y fecha actual.

– El trigger se disparará después de ejecutarse el borrado de la tabla


empleados.

drop table empleados_baja;


CREATE TABLE empleados_baja
(nremp varchar2(50),
jefe varchar(9),
departamento integer,
salario number(9,2) DEFAULT 1000,
usuario varchar2(50),
fecha date,
constraint pk_bajas_emp primary key(nremp, fecha));

CREATE OR REPLACE TRIGGER bajas


AFTER DELETE ON empleados
FOR EACH ROW
BEGIN
INSERT INTO empleados_baja
VALUES (:old.nroemp,:old.jefe,:old.nrodep, :old.salario, USER, SYSDATE);
END;

/*pueba trigger*/
delete empleados where nroemp=1;
select * from empleados_baja;

2º ASIR Página 1
TRIGGERS-1-SOLUCIONES

2. Crear una tabla empleados_baja con la siguiente estructura.

nremp de tipo varchar


jefe de tipo varchar
departamento de tipo entero
salario de tipo entero
usuario de tipo varchar
fecha de tipo fecha

La primary key es la concatención del campo nroemp y fecha.

Crear después un trigger que inserte una fila en la tabla empleados_baja


cuando se borre una fila en la tabla empleados.

– Los datos que se insertan en esta tabla son los relativos al empleado
que se da de baja en la tabla empleados, salvo en las columnas usuario y
fecha se grabarán las variables del sistema USER y SYSDATE que
almacenan el usuario y fecha actual.

– El trigger se disparará después de ejecutarse un borrado de la tabla


empleados, y se registrarán en la tabla de auditorías solo a los
empleados que borremos con un salario inferior a 400.

drop table empleados_baja;


CREATE TABLE empleados_baja
(nremp varchar2(50),
jefe varchar(9),
departamento integer,
salario number(9,2) DEFAULT 1000,
usuario varchar2(50),
fecha date,
constraint pk_bajas_emp primary key(nremp, fecha));

CREATE OR REPLACE TRIGGER bajas2


AFTER DELETE ON empleados
FOR EACH ROW when (old.salario <900)
BEGIN
INSERT INTO empleados_baja
VALUES (:old.nroemp,:old.jefe,:old.nrodep, :old.salario, USER, SYSDATE);
END;

/*pueba trigger:
Con esta instrucción del delete, y el trigger programado, se borran todos los empleados de la tabla, pero se
registran solo los que ganan menos de los 900 euros.
*/
delete empleados ;
select * from empleados_baja ;

2º ASIR Página 2
TRIGGERS-1-SOLUCIONES

3. Crear una tabla empleados_baja con la siguiente estructura.

nremp de tipo varchar


jefe de tipo varchar
departamento de tipo entero
salario de tipo entero
usuario de tipo varchar
fecha de tipo fecha

La primary key es la concatención del campo nroemp y fecha.

Crear después un trigger que inserte una fila en la tabla empleados_baja


cuando se borre una fila en la tabla empleados.

– Los datos que se insertan en esta tabla son los relativos al empleado
que se da de baja en la tabla empleados, salvo en las columnas usuario y
fecha se grabarán las variables del sistema USER y SYSDATE que
almacenan el usuario y fecha actual.

– El trigger se disparará después de ejecutarse un borrado de la tabla


empleados, solo podre registrar a los empleados con un salario inferior
a 500, y que pertenezcan al dpto. 20.

drop table empleados_baja;


CREATE TABLE empleados_baja
(nremp varchar2(50),
jefe varchar(9),
departamento integer,
salario number(9,2) DEFAULT 1000,
usuario varchar2(50),
fecha date,
constraint pk_bajas_emp primary key(nremp, fecha));

CREATE OR REPLACE TRIGGER bajas3


AFTER DELETE ON empleados
FOR EACH ROW when (old.nrodep = 10 and old.salario<500 )--solo ejecuta el cuerpo del triger para este dpto y
estos salarios.
BEGIN

INSERT INTO empleados_baja


VALUES (:old.nroemp,:old.jefe,:old.nrodep, :old.salario, USER, SYSDATE);
END;

2º ASIR Página 3
TRIGGERS-1-SOLUCIONES

/*pueba trigger
Solo hay 3 empleados con menos de 500 euros, y estan en el dpto 10 vamos a ver si
los borra y los registra. Con esto borra a todos los del dpto 10 ( que son 11), pero registra a los 3 que cumplen lo
del sueldo, y que están asignados al dpto 10*/
delete empleados where nrodep=10 ;
select * from empleados_baja ;

4. Crea un trigger que cada vez que se inserte un registro en la tabla PRODUCTOS
se inserte un nuevo registro en la tabla Precios, con el código de producto, un
precio que será el máximo de la tabla precios y la fecha actual.

CREATE OR REPLACE TRIGGER nuevoprod


AFTER INSERT ON PRODUCTOS
FOR EACH ROW
DECLARE
-- No hay local variables
BEGIN
INSERT INTO precios
(nroprod,fechasalida,PRECIO)
VALUES (:NEW.nroprod,SYSDATE,(select max(precio)from precios));
end;
/
/*prueba trigger:
inserto en productos, y después visualizo el registro insertado en las dos tablas*/

insert into productos values((select max(nroprod)+1 from productos), 'trigger');


select p.nroprod, descripcion, precio, fechasalida from productos p, precios pr
where p.nroprod=pr.nroprod and descripcion= 'trigger';

5. Crea un trigger que se dispare antes de que se ejecuten las actualizaciones de


los salarios de la tabla empleados.
Se debe ejecutar el cuerpo del trigger cada vez que se encuentre un registro
cuyo salario actualizado sea es superior a 1250.

En este caso, se aumenta el valor introducido aumentándolo un 10 por ciento.

create or replace trigger trigger_salario


before update of salario
on empleados
for each row when(new.salario>1250)
begin
:new.salario := :new.salario * 1.1;
end trigger_salario;
/

2º ASIR Página 4
TRIGGERS-1-SOLUCIONES

--Pruebo el trigger, y deberia asignar al empleado 1 un salario de 1430

update empleados
set salario= 1300
where nroemp=1;
--veo la nueva asignación

select * from empleados where nroemp=1;

6. Cree un disparador que se dispare cada vez que se inserte un nuevo empleado
y en el caso de que el salario introducido supere los 1000 o sea inferior a 500
coloque "null" en el registro.

create or replace trigger trigger_insertar


before insert
on empleados
for each row when (new.salario >1000 or new.salario <500)
begin
:new.salario := null;end trigger_ingresar;
/
/*pruebo el trigger
Salario NULO;*/
insert into empleados(nroemp, nombre, apellido1, apellido2,salario, nrodep,
nro_oficio)
values (9000, 'pepe','martinez','navarro',200,10,8);--debe meter el salario a nulo.
--compruebo que asigna un nulo en el salario de ese empleado
select * from empleados where nroemp=9000;

--Salario NO NULO
insert into empleados(nroemp, nombre, apellido1, apellido2,salario, nrodep,
nro_oficio) values (9001, 'pepa','martin','navarra',700,10,8);
----compruebo que NO asigna un nulo en el salario de ese empleado, y le pone el 700
select * from empleados where nroemp=9001;

2º ASIR Página 5

También podría gustarte