编译 Trigger 出错,错误的原因是找不到sequence,但是在 sql 里面使用这个sequence非常正常。找了半天原因,另一个同事试了一下给这个sequence授权,就可以编译通过了。
疑惑了很久,为什么sql中可以用,编译trigger就不能用了呢。
查了一些资料,才明白。
是因为 Oracle 在编译Procedu的时候,只检查当前用户的权限,而不管角色。所以,即使这个用户是DBA,也没有用,必须要对这个用户授权。这就是显式授权。
我在CSDN上找到了一个很好的文章,解释了显式授权和隐式授权的区别。
附在下面。
oracle 对象的授权
Oracle授权
一、授权语法
GRANT 语法:
1.显式授权(直接将对象授权给用户)
GRANT privilege [, ...] ON object [, ...] TO { Public| Group | Username|role} [WITH GRANT OPTION ]
2.隐式授权(通过将角色授权给用户)
GRANT role TO { Public| Group | Username|role}
语法说明:
privilege (权限)
可能的权限有:
SELECT--访问声明的表/视图的所有列/字段.
INSERT--向声明的表中插入所有列字段.
UPDATE--更新声明的所有列/字段.
DELETE --从声明的表中删除所有行.
RULE 在表/视图上定义规则 (参见