【发布时间】:2019-12-23 05:02:43
【问题描述】:
我正在尝试创建一个触发器,该触发器在触发时会将数据插入到另一个包含 USER 和 SYSDATE 数据的表中。脚本,但没有从 TRIGGER 插入数据。
我正在运行 Oracle 服务器。
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;
/
我没有收到任何错误。
【问题讨论】:
-
您是否尝试过在创建触发器之后插入记录?发生了什么?因为我有a db<>fiddle here,它显示您的代码工作,创建触发器然后运行您的插入语句的简单权宜之计。
-
@Bohemian 的回答对于您当前的问题是正确的。另外:请遵循@Belayer 的建议,将
modtime存储为DATE。如果你不这样做,你就会走向悲伤。还要注意在同一个答案中,您不需要为用户和日期声明变量;只需使用 Oracle 函数。
标签: sql oracle plsql database-trigger