Oracle存储过程ORA-00942: 表或视图不存在问题解决

今天在写存储过程的时候,发现一个很诡异的问题,存储过程里就一个最简单的SELECT动态sql语句。编写完成以后,执行这个存储过程,总是提示ORA-00942: table or view does not exist(ERROR -942 ORA-00942: 表或视图不存在)这个错误,但是我将这个sql语句复制出来,单独在命令行运行,而又没有任何错误。很纠结,很纳闷,很无解,好好的一个SELECT语句,在命令行里就可以执行,放到存储过程就会出错了,怎么就不对了?

后来经过Google,分析和总结,最终找到了答案。为了满足有的读者就是为了找到解决问题的答案,而并不需要接下来长篇大论的分析,我这里就先给出答案。

角色在函数、存储过程、触发器中都是失效的,也就是说,用户从角色继承过来的权限,不能在函数、存储过程、触发器中使用。在函数、存储过程、触发器中,如果要访问其他用户的对象,需要显式地给用户授予访问的权限。

上面也说了,由于对用户jelly2赋予的是DBA角色,而角色权限在存储过程中是失效的,所以,为了防止访问权限失效,我们需要显示的对jelly2用户赋予访问jelly.tb_student表的权限。

grant select any table to jelly2;

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...