触发器编译但不插入行



我正在尝试创建一个触发器,当触发时,它将数据插入到另一个包含 USER 和 SYSDATE 数据的表中。 脚本,但没有从触发器插入任何数据。

我正在运行 Oracle Server。

SET SERVEROUTPUT ON;
CREATE TABLE dept1
( DEPTNO NUMBER(3) PRIMARY KEY,
DNAME VARCHAR2(20),
LOC VARCHAR2(20)
);
CREATE TABLE dept1_shadow
( DEPTNO NUMBER(3) PRIMARY KEY,
DNAME VARCHAR2(20),
LOC VARCHAR2(20),
USER_ VARCHAR2(32),
MODTIME CHAR(17)
);
INSERT INTO dept1 VALUES (10, 'ACCOUNTING', 'NEW YORK');    
INSERT INTO dept1 VALUES (20, 'RESEARCH',   'DALLAS');    
INSERT INTO dept1 VALUES (30, 'SALES',      'CHICAGO');   
INSERT INTO dept1  VALUES (40, 'OPERATIONS', 'WASHINGTON (D.C.)');    
INSERT INTO dept1  VALUES (50, 'MARKETING', 'BOSTON');

CREATE OR REPLACE TRIGGER row_dept1_trigger
AFTER INSERT ON dept1
FOR EACH ROW
DECLARE
MODTIME CHAR(17);
USER_ VARCHAR2(32);
BEGIN
MODTIME := TO_CHAR(SYSDATE);
USER_ := User;
IF INSERTING THEN
INSERT INTO dept1_shadow (deptno, dname,loc, user_, modtime)
VALUES (:new.deptno, :new.dname,:new.loc,user_, modtime);
END IF;
END;
/

我没有收到任何错误。

创建触发器移动插入语句。

可能性,没有提交。如果您按照布局的顺序运行,则在触发器存在之前完成插入。可能性,没有承诺。
几点建议:

  1. 将模组时间的定义更改为日期。将日期存储为字符串最终会导致某处出现问题。
  2. 删除两个局部变量,只在值子句中使用 USER 和 SYSDATE。
  3. 最后删除 IF 插入语句。您已经定义了一个 AFTER INSERT 触发器,以便 if 语句将始终为 true。

所以结果:

create or replace trigger row_dept1_trigger
after insert on dept1
for each row
begin
insert into dept1_shadow (deptno, dname,loc, user_, modtime)
values (:new.deptno, :new.dname,:new.loc,user, sysdate);
end;

最新更新