在Postgresql中创建触发器时,“ AS”处或附近出现语法错误

时间:2020-10-14 03:45:37

标签: sql postgresql triggers

美好的一天,

我在查询时遇到了麻烦,因为我似乎无法理解为什么我不断收到错误“ AS或附近的语法错误”,这是我的查询:

    CREATE TRIGGER  updateAvailableQuantity
    AFTER INSERT ON sale_item FOR EACH ROW 
    AS $$
    BEGIN
        IF NEW.quantity > 0 THEN
        UPDATE products
        SET products.quantity_instock = products.quantity_instock - NEW.quantity WHERE barcode =  NEW.barcode;
        END IF;
    END;
    $$ LANGUAGE plpgsql;

我一直遇到的错误是

    ERROR:  syntax error at or near "AS"
    LINE 4: AS $$
            ^
    SQL state: 42601
    Character: 100

2 个答案:

答案 0 :(得分:1)

您不能以这种方式在PostgreSQL中编写触发器。这是一个两步过程。

  1. 首先创建一个触发函数:
CREATE OR REPLACE FUNCTION updateAvailableQuantity()
RETURNS TRIGGER
AS
$$
BEGIN
    IF NEW.quantity > 0 THEN
    UPDATE products
    SET quantity_instock = quantity_instock - NEW.quantity WHERE products.barcode =  NEW.barcode;
    END IF;

RETURN NULL;
END;
$$ LANGUAGE plpgsql;
  1. 然后在表上编写触发器以调用如下函数:
CREATE TRIGGER  trg_updateAvailableQuantity
AFTER INSERT ON sale_item 
FOR EACH ROW 
EXECUTE PROCEDURE updateAvailableQuantity();

答案 1 :(得分:0)

您的语法有误。请参见Page上的documentation page

create trigger不能放在FOR EACH ROW语句之前。

文档中也有很多示例。