什么是PostgreSQL相当于Oracle的INSERTING?

时间:2016-02-23 10:09:44

标签: oracle postgresql triggers plpgsql database-trigger

我想创建一个捕获INSERTUPDATE的触发器,并根据操作执行某些操作。在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;

1 个答案:

答案 0 :(得分: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();

相关答案以及更多细节: