2016-06-15 11 views
1

Ich versuche, einen Trigger zu erstellen, um Zeilen zu speichern, die ich in einer separaten Tabelle lösche, aber ich bin ständigen Fehlern konfrontiert. Ich benutze postgresSQL (Terminal). HierFehler: Syntaxfehler bei oder in der Nähe von "INSERT", SQL Triggers, Protokolltabelle

ist, was die Original-Tabelle wie folgt aussieht:

CREATE TABLE person_Lives_there 
(
    pId BIGINT NOT NULL, 
    cityId BIGINT NOT NULL 
); 

Und meine Protokolltabelle

CREATE TABLE Protocol 
(
    pId BIGINT NOT NULL, 
    cityId BIGINT NOT NULL, 
    deletedOn TIMESTAMP 
); 

Nun, meine Trigger sollten so aussehen, aber es gibt immer wieder Fehler mir, gerade jetzt:

ERROR: syntax error at or near "INSERT"

Code:

CREATE TRIGGER deletion 
AFTER DELETE 
ON person_Lives_there 
FOR EACH ROW 
    INSERT INTO Protocol (pId, cityId, deletedOn) 
    VALUES (old.pId, old.cityId, current_date()); 

Ich habe auch schon versucht, einen Trigger und eine Funktion zu haben, aber das führte zu ständigen Fehlermeldungen mit der Funktion.

Vielen Dank für Ihre Hilfe.

+0

Sie haben einen Tippfehler: 'deltedOn' – Jocelyn

+0

Hey, danke. Der Fehler taucht jedoch immer noch auf :( – user6467000

+3

Sie haben Ihren Trigger falsch definiert. Dies ist keine PostgreSQL-Syntax für Trigger, schauen Sie hier: https://www.postgresql.org/docs/9.1/static/sql- createtrigger.html –

Antwort

0

PostgreSQL erlaubt nur prozedurale Trigger. SQL-Statement-Trigger werden nicht unterstützt.

CREATE OR REPLACE FUNCTION person_Lives_there_delete_trg_fx() 
RETURNS trigger AS $$ 
BEGIN 
    INSERT INTO Protocol 
    VALUES(old.PId, old.cityId, current_date()); 
    RETURN NULL; 
END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER person_Lives_there_delete_trg 
    AFTER DELETE ON person_Lives_there 
    FOR EACH ROW 
    EXECUTE PROCEDURE person_Lives_there_fx(); 
Verwandte Themen