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

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

我正在设计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;
postgresql database-trigger
2个回答
0
投票

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

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

并且仅当colc为空时才触发触发器:

CREATE TRIGGER ColC_VIOLATION
  BEFORE INSERT OR UPDATE on mytable
  FOR EACH ROW execute procedure colc_func()
  WHEN ColC is NULL;
© www.soinside.com 2019 - 2024. All rights reserved.