Está en la página 1de 5

--CREACION DE TABLAS create table vendedores ( rut char(12), nombre varchar(10) not null, apellido varchar(10) not null,

comision number not null, sueldo number not null, constraint vendedor_pk primary key (rut) ); create table ventas ( codigo number, fecha date not null, vendedor char(12) not null, total number not null, comision number not null, constraint venta_pk primary key (codigo), constraint venta_fk_vendedor foreign key (vendedor) references vendedores (rut) ); create table auditoria ( codigo number, rut_vendedor char(12), comision_old number, comision_new number, sueldo_old number, sueldo_new number, tipo_audita varchar(10), fecha_audita date, constraint auditoria_pk primary key (codigo) ); --CREACION DE SECUENCIA create sequence seq_ventas start with -10 minvalue -800 maxvalue -10 cycle increment by -2 nocache; select seq_ventas.nextval from dual; --CREACION DE TRIGGER QUE CALCULA VENTAS create or replace trigger tr_ing_ventas before insert on ventas for each row declare com_porcentaje number; begin select seq_ventas.nextval into :new.codigo from dual; select sysdate into :new.fecha from dual; select comision into com_porcentaje from vendedores where rut = :new.vendedor; :new.comision := (com_porcentaje * :new.total)/100; end; /

insert into vendedores values ('1-1','Pedro','Molina',5,125000); insert into vendedores values ('2-2','Luisa','Perez',25,250000); select * from vendedores; insert into ventas (vendedor,total) values ('2-2',20000); select * from ventas; --CREACION DE TRIGGER DE NUEVO VENDEDOR create or replace trigger tr_audita_nuevo after insert on vendedores for each row declare cod_audita number; begin select max(codigo) into cod_audita from auditoria; if (cod_audita is null) then cod_audita := 1000; else cod_audita := cod_audita + 5; end if; insert into auditoria (codigo, rut_vendedor, comision_new, sueldo_new, tipo_audita, fecha_audita) values (cod_audita,:new.rut,:new.comision, :new.sueldo,'Nuevo',sysdate); end; / select * from auditoria; insert into vendedores values ('10-10','Carla','Molina',2,70000); select * from auditoria; --CREACION DE TRIGGER DE ELIMINA VENDEDOR create or replace trigger tr_audita_elimina after delete on vendedores for each row declare cod_audita number; begin select max(codigo) into cod_audita from auditoria; if (cod_audita is null) then cod_audita := 1000; else cod_audita := cod_audita + 5; end if; insert into auditoria (codigo, rut_vendedor, comision_old, sueldo_old, tipo_audita, fecha_audita) values (cod_audita,:old.rut,:old.comision, :old.sueldo,'Elimina',sysdate); end; / delete from vendedores where rut = '3-3'; select * from auditoria; --CREACION DE TRIGGER PARA VENDEDORES create or replace trigger tr_audita_vendedor

after insert or delete on vendedores for each row declare cod_audita number; begin select max(codigo) into cod_audita from auditoria; if (cod_audita is null) then cod_audita := 1000; else cod_audita := cod_audita + 5; end if; if (inserting) then insert into auditoria (codigo, rut_vendedor, comision_new, sueldo_new, tipo_audita, fecha_audita) values (cod_audita, :new.rut, :new.comision, :new.sueldo, 'NUEVO', sysdate); end if; if (deleting) then insert into auditoria (codigo, rut_vendedor, comision_old, sueldo_old, tipo_audita, fecha_audita) values (cod_audita, :old.rut, :old.comision, :old.sueldo, 'ELIMINA', sysdate); end if; end; / insert into vendedores values ('11-11','Carla','Molina',12,470000); select * from auditoria; delete from vendedores where rut = '10-10'; select * from auditoria; --DESACTIVA TRIGGERS CREADOS ANTERIORMENTE alter trigger tr_audita_nuevo disable; alter trigger tr_audita_elimina disable;

--CREACION DE TRIGGER QUE CALCULA VENTAS create or replace trigger tr_ing_ventas before insert on ventas for each row declare com_porcentaje number; begin select seq_ventas.nextval into :new.codigo from dual; select sysdate into :new.fecha from dual; select comision into com_porcentaje from vendedores where rut = :new.vendedor; :new.comision := (com_porcentaje * :new.total)/100; end; / insert into vendedores values ('1-1','Pedro','Molina',5,125000); insert into vendedores values ('2-2','Luisa','Perez',25,250000); select * from vendedores; insert into ventas (vendedor,total) values ('2-2',20000); select * from ventas;

--CREACION DE TRIGGER DE NUEVO VENDEDOR create or replace trigger tr_audita_nuevo after insert on vendedores for each row declare cod_audita number; begin select max(codigo) into cod_audita from auditoria; if (cod_audita is null) then cod_audita := 1000; else cod_audita := cod_audita + 5; end if; insert into auditoria (codigo, rut_vendedor, comision_new, sueldo_new, tipo_audita, fecha_audita) values (cod_audita,:new.rut,:new.comision, :new.sueldo,'Nuevo',sysdate); end; / select * from auditoria; insert into vendedores values ('10-10','Carla','Molina',2,70000); select * from auditoria; --CREACION DE TRIGGER DE ELIMINA VENDEDOR create or replace trigger tr_audita_elimina after delete on vendedores for each row declare cod_audita number; begin select max(codigo) into cod_audita from auditoria; if (cod_audita is null) then cod_audita := 1000; else cod_audita := cod_audita + 5; end if; insert into auditoria (codigo, rut_vendedor, comision_old, sueldo_old, tipo_audita, fecha_audita) values (cod_audita,:old.rut,:old.comision, :old.sueldo,'Elimina',sysdate); end; / delete from vendedores where rut = '3-3'; select * from auditoria; select * from vendedores; --CREACION DE TRIGGER PARA VENDEDORES create or replace trigger tr_audita_vendedor after insert or delete or update of sueldo, comision on vendedores for each row declare cod_audita number; begin select max(codigo) into cod_audita from auditoria; if (cod_audita is null) then

cod_audita := 1000; else cod_audita := cod_audita + 5; end if; if (inserting) then insert into auditoria (codigo, rut_vendedor, comision_new, sueldo_new, tipo_audita, fecha_audita) values (cod_audita, :new.rut, :new.comision, :new.sueldo, 'NUEVO', sysdate); end if; if (deleting) then insert into auditoria (codigo, rut_vendedor, comision_old, sueldo_old, tipo_audita, fecha_audita) values (cod_audita, :old.rut, :old.comision, :old.sueldo, 'ELIMINA', sysdate); end if; if (updating ('sueldo')) then insert into auditoria (codigo, rut_vendedor, sueldo_old, sueldo_new, tipo_audita, fecha_audita) values (cod_audita, :old.rut, :old.sueldo, :new.sueldo, 'MODIFICA', sysdate); end if; if (updating ('comision')) then insert into auditoria (codigo, rut_vendedor, comision_old, comision_new, tipo_audita, fecha_audita) values (cod_audita, :old.rut, :old.comision, :new.comision, 'MODIFICA', sysdate); end if; end; / insert insert select select select update into vendedores values ('11-11','Carla','Molina',12,470000); into vendedores values ('9-9','Carla','Molina',12,470000); * from auditoria; * from auditoria order by codigo DESC; * from vendedores; vendedores set nombre = 'Maria' where rut = '2-2';

delete from vendedores where rut = '10-10'; select * from auditoria; --DESACTIVA TRIGGERS CREADOS ANTERIORMENTE alter trigger tr_audita_nuevo disable; alter trigger tr_audita_elimina disable;

debito restan dinero credito suman dinero

También podría gustarte