[英]Inserting current user and date into table using trigger
我正在嘗試創建一個觸發器,該觸發器將記錄當前日期、用戶以及在特定表上的插入、刪除或更新中執行的操作。
我正在嘗試將該數據存儲在一個單獨的表中:
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;
當嘗試將數據插入表中時,將導致 go 的觸發器關閉,我收到此錯誤:
錯誤報告 - ORA-01858: 在需要數字的地方發現了一個非數字字符
我已經放棄了觸發器,並且在沒有觸發器的情況下插入的數據沒有問題,所以這肯定是我的觸發器的問題。
我查了一下,最常見的原因似乎是日期格式不匹配,我用它來嘗試找到我的日期格式:
select *
from nls_session_parameters
where parameter = 'NLS_DATE_FORMAT';
似乎是“DD/MON/RR”這可能是個問題嗎? 我是 SQL 的新手,日期格式的東西總是讓我失望,我研究了一下,似乎無法從這里找到 go 的方法,任何幫助將不勝感激,謝謝。
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 function。 您正在使用字符串文字。
您希望用戶內置 function。 您正在使用字符串文字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.