创建Oracle Startup触发器提示编译错误但show err无错如何解决
问题原因分析
- 表名不匹配:你创建的表名为
tr_startup_audit,但触发器INSERT语句中操作的表是startup_audit,二者名称不一致,数据库无法找到对应操作的表,直接触发编译报错。 - 权限不足:
AFTER STARTUP ON DATABASE属于数据库级触发器,必须由拥有ADMINISTER DATABASE TRIGGER系统权限的用户(通常是SYS用户)创建,如果你使用普通权限用户创建该触发器,会因为权限不足触发编译错误。 SHOW ERRORS无返回的原因:默认SHOW ERRORS只查询当前登录用户所属schema下的对象报错信息。数据库级触发器默认存放在SYS schema下,如果你用普通用户执行SHOW ERRORS,自然无法查询到SYS schema下的触发器报错。
你可以执行如下命令查询完整报错信息:SHOW ERRORS TRIGGER SYS.TR_STARTUP_AUDIT;
补充注意事项
你代码里的时间格式存在逻辑错误:TO_CHAR(sysdate, 'hh24:mm:ss')中的mm是月份占位符,如果你需要提取分钟需要替换为mi,修改后为TO_CHAR(sysdate, 'hh24:mi:ss'),否则运行时会把月份值放到分钟的位置,和预期结果不符。
内容的提问来源于stack exchange,提问作者john geller
相关产品推荐
相关产品推荐

