0

我想在 PostgreSQL 中创建一个触发器。

我有一个产品表和一个类别表。如果一个新的元组被插入到 products 表中,其 category_id 尚不存在,我想用这个确切的 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);

有人看到问题了吗?谢谢你的帮助!

4

2 回答 2

1

CREATE TRIGGER 的文档中,您可以看到语句的结尾必须是 EXECUTE PROCEDURE,后跟存储过程名称。在您的查询中,您指定了一个不满足这些要求的 INSERT 子句。

您需要在存储过程中构建 INSERT 子句,然后在 CREATE TRIGGER 语句的末尾引用该子句。CREATE PROCEDURE的文档可以帮助您。

于 2020-05-25T20:35:49.313 回答
0

正如您在文档中看到的那样,编写一个在触发器之后运行的函数。

例如:

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
于 2020-05-25T20:47:58.087 回答