【问题标题】:After insert trigger update插入触发器更新后
【发布时间】:2013-05-05 14:22:36
【问题描述】:
CREATE TABLE  "EMPLOYEE_BP" 
   (    "EMP_ID" VARCHAR2(10) NOT NULL ENABLE, 
"FNAME" VARCHAR2(20), 
"LNAME" VARCHAR2(20), 
"JOB_ROLE" VARCHAR2(20), 
"AIRPORT_CODE" VARCHAR2(10) NOT NULL ENABLE, 
"SALARY" NUMBER(9,0), 
"MOBILE" NUMBER(10,0)
 );

CREATE or REPLACE TRIGGER emp_after_insert AFTER INSERT ON EMPLOYEE
FOR EACH ROW
DECLARE
BEGIN
INSERT INTO EMPLOYEE_BP values (:NEW.EMP_ID, :NEW.FNAME, :NEW.LNAME,  :NEW.JOB_ROLE, :    NEW.AIRPORT_CODE, : NEW.SALARY, : NEW.MOBILE);
DBMS_OUTPUT.PUT_LINE('Record successfully inserted into emp_backup table');
END;

--> Apparently constraints are not inserted into backup tables

​该表已创建,但它在第 4 行(即开始语句所在的位置)给了我一个触发器错误。错误是第 4 行语句中的错误被忽略。合成器似乎没问题,我相信这是一个小错误,但我无法弄清楚。我正在使用 Oracle。

提前致谢。

【问题讨论】:

  • 语句被忽略不是错误,这是错误的后果。

标签: sql oracle triggers insertafter


【解决方案1】:

按照你的方式运行触发器,我实际上得到了一个内部 Oracle 错误,这不好。但我认为问题在于:NEW 之间的空格。

这对我有用:

SQL> CREATE or REPLACE TRIGGER emp_after_insert AFTER INSERT ON EMPLOYEE
  2  FOR EACH ROW
  3  DECLARE
  4  BEGIN
  5  INSERT INTO EMPLOYEE_BP values (:NEW.EMP_ID, :NEW.FNAME, :NEW.LNAME,  :NEW.JOB_ROLE, :NEW.AIRPORT_CODE, :NEW.SALARY, :NEW.MOBILE);
  6  DBMS_OUTPUT.PUT_LINE('Record successfully inserted into emp_backup table');
  7  END;
  8  /

Trigger created.

【讨论】:

  • +1:我在编译触发器时也遇到了 PLS-00801 内部错误,当我删除 :NEW 之间的空格时,该错误就会消失。
【解决方案2】:

我不是 Oracle 专家,但您要么需要在 DECLARE 行中添加内容,要么根据 example 实际声明一些内容

CREATE or REPLACE TRIGGER emp_after_insert AFTER INSERT ON EMPLOYEE
FOR EACH ROW
DECLARE
    unused varchar2(10);
BEGIN
INSERT INTO EMPLOYEE_BP values (:NEW.EMP_ID, :NEW.FNAME, :NEW.LNAME,  :NEW.JOB_ROLE, :NEW.AIRPORT_CODE, :NEW.SALARY, :NEW.MOBILE);
DBMS_OUTPUT.PUT_LINE('Record successfully inserted into emp_backup table');
END;

【讨论】:

  • 尝试了一切,得出的结论是Oracle的免费版本只是小故障,一些语句在命令终端中工作,另一些在脚本中工作,而另一些在sql命令中工作。无论如何,谢谢。
猜你喜欢
  • 2021-03-08
  • 2016-10-13
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
相关资源
最近更新 更多