这个登录触发器有什么问题?

时间:2015-01-04 19:42:52

标签: sql oracle plsql triggers

当我编写此触发器时,当我尝试使用SYSSYSTEM以外的用户登录时会显示错误消息:

CREATE OR REPLACE TRIGGER logon_trigger
AFTER LOGON
ON DATABASE
BEGIN
 if user not in ('sys' , 'system') then
 INSERT INTO HOMEWORKU.LOGON_LOGOFF_TABLE (who, when_login,when_logoff) VALUES (user, sysdate,'null');
 end if;
END;

1 个答案:

答案 0 :(得分:2)

如果when_logonwhen_logoff都是数据类型为DATE的列,那么您尝试在其中插入字符串时会出错:除非它恰好代表了根据您当前的NLS设置确定日期,您不应该依赖它。因此,将'null'更改为不带引号的null

您还需要将用户比较为大写值,因此将'sys'更改为'SYS'等

if user not in ('SYS' , 'SYSTEM') then
   INSERT INTO HOMEWORKU.LOGON_LOGOFF_TABLE (who, when_login, when_logoff)
   VALUES (user, sysdate, null);
end if;