我想在PostgreSQL中创建一个触发器。
我有一个产品表和一个类别表。如果将一个新的元组与category_id插入到products表中,但该元组尚不存在,我想使用此确切的category_id创建一个类别。我写了一些SQL代码,但在第6行的“ INSERT”处收到语法错误。
我的代码如下:
CREATE TRIGGER ProductTrig
AFTER INSERT ON products
REFERENCING NEW ROW AS newrow
FOR EACH ROW
WHEN (newrow.category_id NOT IN (SELECT category_id FROM categories))
INSERT INTO categories (category_id) VALUES (newrow.category_id);
有人看到这个问题吗?感谢您的帮助!
答案 0 :(得分:1)
在documentation for CREATE TRIGGER中,您可以看到语句的末尾必须是EXECUTE PROCEDURE,后跟存储过程名称。在查询中,指定不符合这些要求的INSERT子句。
您需要在存储过程中构造INSERT子句,然后在CREATE TRIGGER语句的末尾引用它。 documentation for CREATE PROCEDURE可以为您提供帮助。
答案 1 :(得分:0)
如您在docs中所见,编写了一个在触发器之后运行的函数。
例如:
CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
ON table_name
[ FROM referenced_table_name ]
[ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ]
[ REFERENCING { { OLD | NEW } TABLE [ AS ] transition_relation_name } [ ... ] ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( condition ) ]
EXECUTE { FUNCTION | PROCEDURE } function_name ( arguments )
where event can be one of:
INSERT
UPDATE [ OF column_name [, ... ] ]
DELETE
TRUNCATE