plpgsql查询-如何将if,then与update结合?

时间:2019-02-06 10:14:56

标签: postgresql plpgsql

我有以下查询:

create or replace function test_function()
    returns trigger as $body$
begin
    if (tg_table_name = 'mytable' and tg_op='insert') then
        INSERT into another_table(id, name) values(new.id, new.name);
        return new;
    else if (tg_table_name = 'mytable' and tg_op='update') then
        INSERT into another_table(id, name) values(new.id, new.name);
        return new;
    end if;
    return null;
end;
$body$ language plpsql;

编辑: 我需要做一个:

update table mytable set name = 'test';

EDIT2:这不起作用,value2并未更新为null;

BEGIN   
IF (TG_OP = 'INSERT' AND TG_TABLE_NAME='tableA') THEN
    INSERT INTO tableB(
            columnA,
            columnB)
        VALUES(
            new.value1,
            new.value2);
new.value2 := null;
RETURN NEW;
ELSEIF (TG_OP = 'UPDATE' AND 
TG_TABLE_NAME='tableA') THEN
    INSERT INTO tableB(
            columnA,
            columnB)
        VALUES(
            new.value1,
            new.value2);
new.value2 := null;
RETURN NEW;
END IF;
RETURN null;
END;

编辑:4

create trigger add_notif_trigger after insert or update on 
 mytable for each row when (new.name > 100) execute 
 procedure function test_function();

我需要对这两种情况进行更新。我不知道该怎么做。

问候,

2 个答案:

答案 0 :(得分:1)

如果要修改基表的列值,则不需要其他更新,只需分配NEW.column_name

if
..

NEW.name := 'test';

else if
..

NEW.name := 'test';

答案 1 :(得分:0)

如果然后    如果new.value = true然后    END IF;

END IF;

要小心, 当您使用update(TG_OP ='UPDATE')时,您具有新旧值,而在插入过程中,您只有新值