Oracle'语句级别'触发器

时间:2012-03-05 22:21:57

标签: oracle triggers

我想创建一个Statement level Trigger,这意味着我想在表EMP中插入一行或多行时,只将一条记录插入到表EMP_AUDIT中。例如:如果我在EMP中插入了10条记录,则只应在EMP_AUDIT表中插入1条记录。

列没有限制。 (即可以为NULL)

我尝试使用以下触发器,但它给出了错误(2,2):PL / SQL:SQL语句被忽略 错误(2,14):PL / SQL:ORA-00947:值不够

   CREATE OR REPLACE
    TRIGGER TRIG_EMP AFTER INSERT ON EMP
   BEGIN
    INSERT INTO EMP_AUDIT
    VALUES (TRANID,EMPNUM,SYSDATE); 
   END;
   CREATE TABLE EMP
   (TRANID NUMBER,
    EMPNUM VARCHAR2(100),
    EMPLOC VARCHAR2(100)); 
   CREATE TABLE EMP_AUDIT
   (EVENTID NUMBER,
    EMPNUM VARCHAR2(100),
    ENTRDATE DATE); 

2 个答案:

答案 0 :(得分:3)

语句级触发器(您拥有)无法看到插入的数据。毕竟,如果插入了10行,那么列应该用于审计表的值是什么?

您需要一个行级触发器才能工作,例如:

CREATE OR REPLACE
TRIGGER TRIG_EMP
  AFTER INSERT ON EMP
  FOR EACH ROW
BEGIN
  INSERT INTO EMP_AUDIT
  VALUES (:NEW.TRANID,:NEW.EMPNUM,:NEW.SYSDATE); 
END;

答案 1 :(得分:0)

使用这段代码:

CREATE OR REPLACE TRIGGER 
TRIG_EMP
AFTER INSERT ON EMP
FOR EACH ROW
BEGIN
  INSERT INTO EMP_AUDIT
  VALUES (:NEW.TRANID,:NEW.EMPNUM,:NEW.SYSDATE);
END;