PDA

Visualizza la versione completa : [POSTGRESQL] Errore di sintassi nella scrittura di un trigger


caiolo
07-05-2007, 08:09
A questo script mi da quell'errore, ma nn capisco xè..

CREATE TRIGGER incrementa_opere_museo
AFTER INSERT ON “Opera”
FOR EACH ROW
BEGIN
UPDATE “Museo” SET numero_opere_presenti = numero_opere_presenti + 1 WHERE idmuseo= NEW.idmuseo;
END;

questo errore


Errore SQL:


ERROR: syntax error at or near "BEGIN"
LINE 4: BEGIN
^

oregon
07-05-2007, 08:27
La sintassi dovrebbe essere

CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }
ON table [ FOR [ EACH ] { ROW | STATEMENT } ]
EXECUTE PROCEDURE funcname ( arguments )

caiolo
07-05-2007, 13:05
quindi... il provecesso da eseguire lo devo mettere in una funzione e richiamarla ?

e come glielo passo il parametro alla funzione ?


CREATE OR REPLACE FUNCTION incrementa_opere_museo(parametro) RETURNS TRIGGER AS $incrementa_opere_museo$

BEGIN
UPDATE “Museo” SET numero_opere_presenti = numero_opere_presenti + 1 WHERE idmuseo= parametro;
END;



così ??
MAHHH e ri9chiamarla dal trigger ?

caiolo
07-05-2007, 13:17
ho provato così :

CREATE OR REPLACE FUNCTION incrementa_opere_museo(parametro) RETURNS TRIGGER AS $incrementa_opere_museo$

BEGIN
UPDATE “Museo” SET numero_opere_presenti = numero_opere_presenti + 1 WHERE idmuseo= parametro;
RETURN NULL;
END;
$incrementa_opere_museo$ LANGUAGE plpgsql;

CREATE TRIGGER incrementa_opere_museo
AFTER INSERT ON “Opera”
FOR EACH ROW
EXECUTE PROCEDURE incrementa_opere_museo(NEW.idmuseo)



e da questo errore


ERROR: syntax error at or near "NEW"
LINE 12: EXECUTE PROCEDURE incrementa_opere_museo(NEW.idmuseo)

power.mobile
07-05-2007, 16:34
basta che scrivi solo idmuseo senza il NEW...

Loading