plpgsql 函数带有“case when”来更新列值

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

我想创建一个 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
子句中。

谢谢

postgresql function case plpgsql
1个回答
0
投票

您使用 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
执行语句。

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