2012-01-10 14 views
7

Estoy probando funciones y disparadores int PostgreSQL, sin embargo, estoy teniendo un problema, cuando se activa la función es que me da un errorfunciones PostgreSQL y desencadena

ERROR: control alcanzó final del procedimiento desencadenado sin vuelta

este procedimiento en particular sólo se ejecuta una inserción en orden, así que no veo por qué se necesita un retorno

este es el script:

CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ 
BEGIN 
    insert into Audit values('k',124,'l'); 
END; 
$tree_stamp$ 
LANGUAGE plpgsql; 

create trigger forest_aud_ins after insert on forest 
for each row execute procedure forest_aud_func() 

insert into forest values('Blue',1600,'Malta','Health Ltd') 

Respuesta

16

El mensaje de error lo dice todo. Es necesario realizar un envío a partir de la función de disparo:

CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ 
BEGIN 
    insert into Audit values('k',124,'l'); 
    return new; 
END; 
$tree_stamp$ 
LANGUAGE plpgsql; 

De the manual:

Una función de activación debe devolver NULL o un valor de grabación/fila que tiene exactamente la estructura de la tabla el gatillo fue despedido para.

+0

bien, gracias, hiciste lo que dijiste, ahora me da este error: ERROR: el valor duplicado de la clave viola la restricción única "audit_pk" DETALLE: La clave (au_code) = (124) ya existe. hice clic en la tabla y 124 ya no existe ¿Alguna idea? – Karl

+0

¿Qué transacción estás enviando cuando se produce este error? – Kuberchaun

+0

@Karl: Aparentemente tiene una clave principal en la tabla 'audit' que infringe al insertar los valores de auditoría. Ese problema no tiene nada que ver con escribir el disparador. –

Cuestiones relacionadas