06.09.2014 Views

Bases de datos: Software libre - Universitat Oberta de Catalunya

Bases de datos: Software libre - Universitat Oberta de Catalunya

Bases de datos: Software libre - Universitat Oberta de Catalunya

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

© FUOC • 71Z799014MO 61 <strong>Bases</strong> <strong>de</strong> <strong>datos</strong> en PostgreSQL<br />

El mensaje pue<strong>de</strong> incluir valores <strong>de</strong> variables mediante el carácter ‘ %’:<br />

• raise <strong>de</strong>bug ‘funcion(): ejecutada con éxito;<br />

• raise notice ‘El valor % se tomo por omisión’, variable;<br />

• raise excepción ‘El valor % está fuera <strong>de</strong>l rango permitido’, variable;<br />

6.4. Disparadores<br />

Las funciones <strong>de</strong>ben llamarse explícitamente para su ejecución o para incluirlas<br />

en consultas. Sin embargo, se pue<strong>de</strong> <strong>de</strong>finir que algunas funciones se ejecuten<br />

automáticamente cuando cierto evento tenga lugar en cierta tabla. Estas<br />

funciones se conocen como disparadores o triggers y se ejecutan mediante los<br />

comandos insert, <strong>de</strong>lete y upta<strong>de</strong>.<br />

Agregamos la tabla historial que almacena los productos <strong>de</strong>scontinuados cuando se eliminan<br />

<strong>de</strong> la tabla productos.<br />

create table historial(<br />

fecha date,<br />

parte varchar(20),<br />

tipo varchar(20),<br />

especificacion varchar(20),<br />

precio float(6)<br />

);<br />

Para po<strong>de</strong>r utilizar una función como disparador, no <strong>de</strong>be recibir argumentos<br />

y <strong>de</strong>be retornar el tipo especial trigger:<br />

create function respaldar_borrados() returns trigger as ‘<br />

begin<br />

insert into historial values (<br />

now(),<br />

old.parte,<br />

old.tipo,<br />

old.especificacion,<br />

old.psugerido<br />

);<br />

return null;<br />

end;<br />

La variable old está pre<strong>de</strong>finida por<br />

PostgreSQL y se refiere al registro<br />

con sus antiguos valores. Para<br />

referirse a los nuevos valores,<br />

se dispone <strong>de</strong> la variable new.<br />

La función está lista para ser utilizada como disparador, sólo es necesario <strong>de</strong>finirlo<br />

y asociarlo a la tabla y al evento <strong>de</strong>seado:<br />

create trigger archivar<br />

beofre <strong>de</strong>lete<br />

on productos<br />

for each row execute procedure respaldar_borrados();

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!