PostgreSQL DB Design IF列为NULL则为COALESCE(COLUMN A,COLUMN B)

时间:2020-01-27 02:12:10

标签: postgresql database-trigger

我正在设计一个PostgreSQL模式,我想创建一个规则,如果用户不输入C列的值,那么我将C列的值设为COALESCE(COLUMN A,COLUMN B)。 我已经尝试过表更新和触发器,但是逻辑上肯定有问题,非常感谢您的帮助-谢谢。

我尝试过:

1。

update Mytable 
    set ColC=
    case when ColC is NULL then COALESCE(ColA,ColB)
    else ColC;

2。

CREATE TRIGGER ColC_VIOLATION
BEFORE INSERT OR UPDATE OF ColC
ON Mytable FOR EACH ROW
WHEN ColC is NULL then COALESCE(ColA,ColB)

3。

CREATE OR REPLACE FUNCTION ColC_func() RETURNS trigger AS 
$$
BEGIN
UPDATE Mytable
    set ColC=
    case when ColC is NULL then  COALESCE(ColA,ColB)
    else ColC ;
END
$$
LANGUAGE PLPGSQL;

1 个答案:

答案 0 :(得分:1)

您不需要在触发器中使用UPDATE语句,只需分配值即可:

CREATE OR REPLACE FUNCTION ColC_func() RETURNS trigger AS 
$$
BEGIN
   NEW.colc := COALESCE(NEW.cola, NEW.colb);
   RETURN NEW;
END
$$
LANGUAGE PLPGSQL;

并使触发器仅在colc为null时触发:

CREATE TRIGGER ColC_VIOLATION
  BEFORE INSERT OR UPDATE on mytable
  FOR EACH ROW execute procedure colc_func()
  WHEN ColC is NULL;
相关问题