我正在尝试创建一个触发器,该触发器在触发时将数据插入到另一个具有USER和SYSDATE数据的表中。脚本但未从TRIGGER插入任何数据。
我正在运行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;
/
我没有任何错误。
答案 0 :(得分:6)
在创建触发器之后,在 之后移动插入语句。
答案 1 :(得分:2)
可能性,没有提交。如果按布局顺序运行,则会在触发器存在之前完成插入操作。可能性,没有提交。
几个建议:
结果:
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;