trigger.sql 1.66 KB
Newer Older
Cesar Giulano Gonzalez Maqueda committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
/*
 En el dvdrental cree una tabla llamada registro_inventory con las siguientes columnas:
1. Fecha
2. film_id.(Foreign Key relacionada con la tabla film)
3. Store_id.(Foreign Key relacionada con la tabla store)
Cree un TRIGGER en la tabla inventory que se ejecute despus de cualquier
actualizacin(UPDATE) en la tabla de inventory.
La funcin de TRIGGER insertar viejos valores de la tabla inventory en una nueva fila en la
tabla registro_inventory.
Notas:
Se puede acceder a viejos valores a travs del sintaxis OLD.film_id y OLD.store_id. Estos
valores estn disponibles solamente en la funcin de TRIGGER 
 */
create table if not exists registro_inventory(
	id_registro serial primary key,
	fecha timestamp,
	film_id int not null,
	store_id int not null,
	constraint fk_film foreign key(film_id) references film(film_id),
	constraint fk_store  foreign key(store_id) references store(store_id)
);


CREATE function insert_old_inventory() RETURNS trigger AS $insert_old_inventory$
    BEGIN
        IF NEW.film_id IS NULL THEN
            RAISE EXCEPTION 'Film Id no puede ser nulo';
        END IF;
        IF NEW.store_id IS NULL THEN
            RAISE EXCEPTION 'Store_id no puede ser nulo';
        END IF;

        insert into registro_inventory (id_registro, fecha, film_id, store_id) values (default, old.last_update, old.film_id, old.store_id);
        RETURN NEW;
    END;
$insert_old_inventory$ LANGUAGE plpgsql;

Cesar Giulano Gonzalez Maqueda committed
38
CREATE trigger insert_old_inventory AFTER UPDATE ON inventory FOR EACH ROW EXECUTE FUNCTION insert_old_inventory();
Cesar Giulano Gonzalez Maqueda committed
39 40 41 42

---Test
update inventory set store_id =2 where inventory_id = 1;

Cesar Giulano Gonzalez Maqueda committed
43 44
select * from inventory i2 where inventory_id = 2;
select * from registro_inventory;