【发布时间】:2021-05-22 14:31:03
【问题描述】:
我正在尝试创建一个触发器,该触发器将记录当前日期、用户以及对特定表的插入、删除或更新执行的操作。
我正在尝试将该数据存储在单独的表中:
CREATE TABLE BORROWER_CHANGES (
ChangeDate DATE NOT NULL,
UserName VARCHAR2(20) NOT NULL,
Action VARCHAR2(10) NOT NULL);
到目前为止,这是我的触发器:
CREATE OR REPLACE TRIGGER BORROWER_MODIFICATION
AFTER INSERT OR UPDATE OR DELETE ON borrower
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO borrower_changes (ChangeDate, UserName, Action)
VALUES ('SysDate', 'User', 'INSERT');
ELSIF UPDATING THEN
INSERT INTO borrower_changes (ChangeDate, UserName, Action)
VALUES ('SysDate', 'User', 'UPDATE');
ELSIF DELETING THEN
INSERT INTO borrower_changes (ChangeDate, UserName, Action)
VALUES ('SysDate', 'User', 'DELETE');
END IF;
END;
当尝试将数据插入到表中时,会导致触发器关闭,我收到此错误:
错误报告 - ORA-01858: 在需要数字的地方发现了一个非数字字符
我已经放弃了触发器,并且在没有触发器的情况下插入的数据没有问题,所以这肯定是我的触发器的问题。
我查了一下,最常见的原因似乎是日期格式不匹配,我用它来尝试找到我的日期格式:
select *
from nls_session_parameters
where parameter = 'NLS_DATE_FORMAT';
似乎是“DD/MON/RR”,这可能是个问题吗?我是 SQL 新手,日期格式的东西总是让我感到厌烦,我进行了一些研究,似乎找不到从这里开始的方法,任何帮助将不胜感激,谢谢。
【问题讨论】: