在 PostgreSQL 中创建触发器函数时出现语法错误

问题描述 投票:0回答:1

我使用下一个脚本在 PostgreSQL 中创建触发器函数:

CREATE OR REPLACE FUNCTION pdate_day_month_decade_trigger()
  RETURNS TRIGGER 
  LANGUAGE PLPGSQL
  AS
$$
BEGIN
    IF NEW."dayMonth" <> OLD."dayMonth" THEN
        DECLARE decadeMonthValue INTEGER := (
            CASE
              WHEN NEW."dayMonth" >= 1 AND NEW."dayMonth" <= 10 THEN 1
              WHEN NEW."dayMonth" >= 11 AND NEW."dayMonth" <= 20 THEN 2
              ELSE 3
            END
         );
         UPDATE main."YDate"
         SET "decadeMonth"=decadeMonthValue
         WHERE id = NEW.id;
    END IF;

    RETURN NEW;
END;
$$

但出现错误:

ERROR:  syntax error (at or near: "SET")
LINE 16:    SET "decadeMonth"=decadeMonthValue
            ^
CONTEXT:  wrong type name "main."YDate"
         SET "decadeMonth"" 

ОШИБКА:  syntax error (at or near: "SET")
SQL state: 42601
Character: 394

我尝试更改类型的语法(使用全名和缩写),但错误仍然存在。

postgresql triggers
1个回答
0
投票

plpgsql 块结构不受尊重。

DECLARE
应出现在
BEGIN
之前。虽然这里不需要,但您可以将多个块嵌套在一起,但仍然必须尊重它们的结构。

© www.soinside.com 2019 - 2024. All rights reserved.