Oracle-11g-R2

Oracle:將使用者名插入到同一表的列中後觸發儲存使用者名

  • May 17, 2017

假設我的數據庫中的表中有一個名為“CREATE_USER”的列。我將如何在表上的 INSERT 上創建觸發器:將創建使用者的行的名稱插入同一行內的列“CREATE_USER”中。

基本上是在同一行中儲存創建使用者使用者名的行的列。我四處尋找,找不到任何對我有用的東西。我在下麵包含了我嘗試過的內容。

CREATE OR REPLACE TRIGGER trigger_name
AFTER INSERT ON table_name FOR EACH ROW

DECLARE v_username varchar2(20);

BEGIN

   SELECT USER INTO v_username
   FROM dual;

   INSERT INTO table_name (first_col_name, second_col_name)
   VALUES (:new.first_col_name, v_username);

END;

我立即遇到的第一個問題是“ORA-00947:沒有足夠的值”……

另外,如果我想對數據庫中的每個表執行此操作,是否需要為每個表單獨觸發器?

首先,在行級觸發器主體中,您不能對觸發觸發器的表執行 DML。您將收到“mutating table”錯誤。

其次,您不能修改AFTER觸發器主體內的行,只能在BEFORE. 假設CREATE_USER欄位具有適當的類型和大小,觸發器看起來像

CREATE OR REPLACE TRIGGER BI_TABLE_NAME
BEFORE INSERT ON table_name FOR EACH ROW

BEGIN
   :new.CREATE_USER:= USER;
END;

另一種選擇是根本不使用觸發器,而是有一個預設值的列USER

create table test_table (test_table_id int not null primary key,
..., 
created_by varchar2(30) default user);

引用自:https://dba.stackexchange.com/questions/173830