我正在设计一个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;
答案 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;