2025-11-18 04:02:16
要创建触发器得先写T-代码对吧?得在SQL里用CREATE TRIGGER开头,然后写触发时机比如BEFORE INSERT或者AFTER UPDATE。但有时候保存的时候会提示编译失败,可能因为名字重复了,或者括号打错了,还有可能是没给表权限。比如我上次试过给员工表加触发器,结果发现没给SELECT权限,系统就报错说编译失败。
为什么是这个样子呢?因为Oracle编译触发器分两步走,先检查语法对不对,再检查有没有权限。比如测试数据显示,60%的编译失败是语法问题,25%是权限不够,剩下的是命名重复。比如有个程序员把触发器名写成TRIGGER_2023,结果发现三个月前已经有同名触发器存在了。还有个案例是给销售表加触发器,但没给这个表的SELECT权限,导致系统提示" insufficient privileges"。其实Oracle的文档里写得很清楚,创建触发器需要至少SELECT、INSERT、UPDATE、DELETE这些基本权限。所以下次遇到编译失败,先检查括号和名字有没有重复,再确认有没有给表权限。
本题链接: