我正在用這個alter語句測試下面列出的名爲「tulockout」的觸發器......「alter user testuser account lock;」查看觸發器是否記錄表中發生的事件「log_table_changes」。 但是,某些值不準確地登錄到表「log_table_changes」中。具體來說,v_dusr.start_dt在執行「alter user testuser account lock;」後觸發器「tulockout」被觸發時返回NULL。聲明。ORACLE 11g觸發器
我不確定爲什麼。你能協助嗎? 我該如何解決這個問題?謝謝。
create or replace trigger tulockout
after alter on schema
declare
cursor v_abc is
select du.username, max(us.start_dt)
from dba_users du, user_session us, users_info ui
where ui.db_user_name = du.username
and ui.db_user_name = us.user_name
and ui.db_user_name = ora_login_user;
v_dusr v_abc%ROWTYPE;
begin
if(ora_sysevent = 'ALTER' and v_dusr.username = ora_dict_obj_name and
v_dusr.account_status = 'LOCKED') then
insert into log_table_changes(username,
lastlogin_date,
notes,
execute_date,
script_name
)
values(
v_dusr.username,
v_dusr.start_dt,
ora_dict_obj_type||', '||
ora_dict_obj_name||' has been locked out.',
sysdate,
ora_sysevent
);
end;
感謝您的回覆。我測試了你的答案,但沒有添加到「log_table_changes」表中。我有「創建或替換觸發器鬱悶 後架構改變」正確,因爲觸發器應該工作了dba_users表status_Account列從開放改爲鎖定。 – caa35
你的問題意味着觸發器正在工作,雖然插入了一些空值;但再看一遍,我不認爲它可以。我認爲它必須是數據庫觸發器,而不是模式?而且這兩個ora_變量只有在用戶鎖定自己的賬戶時纔會匹配 - 我認爲......目前無法進行測試。 –
@ caa35 - 更新了答案,但仍然是錯誤的。 –