jueves, 20 de octubre de 2011

Clase 20 de octubre TRIGGER!!

//crear la tabla autor y libro

create table auto(idAutor integer primary key,nombre varchar2(30));
create table libro(idLibro integer primary key,nombrelibro varchar2(30),idAutor references autor);

// inserciones

insert into autor values(1'erwin');
insert into autor values(2'soilaCerda');
insert into autor values(3'rosamel fierro');
insert into autor values(4'marichu palacios');

insert into libro values(1'introduccion a oracle'1);
insert into libro values(2'kamasutra'2);
insert into libro values(3'las mil y una noche'3);
insert into libro values(4'la parcela de erwin'4);


// Contador
select * autor;

select idAutoe, count(*)
from libro
group by idAutor
order by 2 desc;

// trigger

create or replace trigger cascadaDelete
alter delete on autor
for each row
begin
delete from libro
where idAutor = :old.idAutor;
end;

delete from auto
where nombre = 'erwin';


Desactivar trigger
alter trigger cascadaDelete disable;

---------------------------------------------------------------------------------------------------------

create table producto(idProducto integer primary key,nombreProducto varchar2(30),stockActual integer);
create table compra(idCompra integer primary key,fecha date);
create table detalleCompra(idCompra reference compra,idProducto reference producto,cantidad integer);
create table merma(idMerma integer primary key,fecha date ,idProducto integer references producto,cantidad integer);

create or replace trigger actualizaStock
after insert on detalleCompra
for each row
begin
update producto
set stockActual = stockActual + :new.cantidad;
where idProducto = :new.idProducto;
end;

create or replace trigger cantidadMerma
alter insert on merma
for each row
begin
update producto
set tockActual = stockActual - :new.cantidad;
where idProducto = :new.idProducto;
end;