添加一个'AFTER LOGON ON DATABASE'的trigger以后,发现日志中出现如下错误片段:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在 line 5
检查了trigger中的查询语句后,发现以下查询的确是返回了多行数据:
select username,SYS_CONTEXT('USERENV','IP_ADDRESS')
into v_username,v_ip
from sys.v_$session where AUDSID = SYS_CONTEXT('USERENV', 'SESSIONID');
在后面加入了过滤条件,完整语句如下:
select username,SYS_CONTEXT('USERENV','IP_ADDRESS')
into v_username,v_ip
from sys.v_$session where AUDSID = SYS_CONTEXT('USERENV', 'SESSIONID')
and upper(username) not in ('SYS') and type<>'BACKGROUND';
解决此问题后,发现报了另外一个错误:
ORA-04088: error during execution of trigger '...'
ORA-01403: no data found
ORA-06512: at line 5
加入如下异常处理语句后解决:
EXCEPTION
WHEN NO_DATA_FOUND
THEN
...
本文详细描述了在使用'AFTERLOGONONDATABASE'触发器后遇到的Oracle数据库错误ORA-00604和ORA-01422,并提供了排查和解决这些问题的方法,最终通过异常处理语句成功解决了错误。

9923

被折叠的 条评论
为什么被折叠?



