簡體   English   中英

使用觸發器將當前用戶和日期插入表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM