【问题标题】:Inserting current user and date into table using trigger使用触发器将当前用户和日期插入表中
【发布时间】: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 新手,日期格式的东西总是让我感到厌烦,我进行了一些研究,似乎找不到从这里开始的方法,任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:
    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;
    

    您想要sysdate 内置函数。您正在使用字符串文字。
    你想要user 内置函数。您正在使用字符串文字。

    【讨论】:

    • 哦,哇,我不敢相信我忽略了这一点,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 2016-06-11
    相关资源
    最近更新 更多