2016-06-15 23 views
1

別のテーブルに削除する行を保存するためのトリガを作成しようとしていますが、一定のエラーが発生しています。私はpostgresSQL(ターミナル)を使用しています。ここでエラー: "INSERT"またはその近くの構文エラー、SQLトリガ、プロトコルテーブル

は、元の表は次のようになります。

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

そして、私のプロトコルテーブル今

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

、今、私のトリガーは、次のようになりますが、それは常に私にエラーを与えます:

ERROR: syntax error at or near "INSERT"

コード:

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()); 

私はすでにトリガーと関数を持っていることを試みましたが、その関数ではエラーメッセージが常に表示されていました。

ありがとうございました。

+0

「deltedOn」 – Jocelyn

+0

ありがとう、ありがとう。しかし、エラーがまだポップアップしています:( – user6467000

+3

間違った方法でトリガを定義しました。これはPostgreSQLのトリガの構文ではありません。こちらをご覧ください:https://www.postgresql.org/docs/9.1/static/sql- createtrigger.html –

答えて

0

PostgreSQLでは手続き型トリガのみが許可されています。 SQL文のトリガはサポートされていません。

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(); 
関連する問題