我想创建一个 plsql 函数,该函数将由 BEFORE INSERT 触发器调用。 该函数根据另一列的值更新另一列。
这是代码:
CREATE OR REPLACE FUNCTION Xupd_cat_prop()
RETURNS TRIGGER
AS
$$
DECLARE categ_prop varchar;
BEGIN
kateg_prop := CASE
WHEN new.cat_tarif = 'domestic_1' OR new.cat_tarif = 'domestic_2' THEN new.class = 'DOM'
WHEN new.cat_tarif = 'nondomestic_1' THEN new.class = 'NONDOM'
WHEN new.cat_tarif = 'industry' THEN new.class = 'IND'
END;
RETURN new;
END;
$$
LANGUAGE plpgsql;
但这行不通。我正在使用 Postgresql 16。 错误出现在
WHEN
子句中。
谢谢
您使用 SQL
CASE
语句。 WHEN
子句只能包含表达式:
kateg_prop := CASE
WHEN new.cat_tarif = 'domestic_1' OR new.cat_tarif = 'domestic_2' THEN 'DOM'
WHEN new.cat_tarif = 'nondomestic_1' THEN 'NONDOM'
WHEN new.cat_tarif = 'industry' THEN 'IND'
END;
虽然语法相似,但 SQL(函数式)和 PL/pgSQL(过程式)之间存在显着差异
CASE
:
SQL
CASE
:
CASE var WHEN expr THEN expr [...] END
PLpgSQL
CASE
CASE var WHEN expr THEN plpgsql statement [...] END CASE
SQL
CASE
返回一个值,PL/pgSQL CASE
执行语句。