trigger.sql 1.68 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 38 39 40 41 42 43 44 45
/*
 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;

CREATE trigger if not exists insert_old_inventory AFTER UPDATE ON inventory
    FOR EACH ROW EXECUTE FUNCTION insert_old_inventory();

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

select * from inventory i2 where inventory_id = 2    
select * from registro_inventory