【问题标题】:What is PostgreSQL equivalent of INSERTING from Oracle?PostgreSQL 与 Oracle 的 INSERTING 等价物是什么?
【发布时间】:2016-06-05 02:40:45
【问题描述】:
我想创建一个触发器来捕获INSERT 和UPDATE 并根据动作执行某些操作。在 Oracle 中可以这样做:
CREATE OR REPLACE TRIGGER ABC_BIU BEFORE INSERT OR UPDATE ON ABC
FOR EACH ROW
BEGIN
IF INSERTING THEN
...
END IF;
...
END;
Here提到INSERTING是一个关键字,与Oracle中的TRIGGER和here一起使用可以看用法:
IF INSERTING THEN ... END IF;
IF UPDATING THEN ... END IF;
【问题讨论】:
标签:
oracle
postgresql
triggers
plpgsql
database-trigger
【解决方案1】:
首先,你需要在 Postgres 中有一个单独的触发函数:
CREATE OR REPLACE FUNCTION trg_abc_biu()
RETURNS trigger AS
$func$
BEGIN
CASE TG_OP -- to fork depending on operation
WHEN ' INSERT' THEN
-- do something
WHEN ' UPDATE' THEN
-- do something
ELSE
RAISE EXCEPTION 'This trigger function expects INSERT or UPDATE!';
END CASE;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;
...然后可以在触发器(或多个)中使用:
CREATE TRIGGER abc_biu
BEFORE INSERT OR UPDATE ON abc
FOR EACH ROW EXECUTE PROCEDURE trg_abc_biu();
更多细节的相关答案: