Oracle-11g-R2
Oracle:將使用者名插入到同一表的列中後觸發儲存使用者名
假設我的數據庫中的表中有一個名為“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);