Oracle存储过程调用另一个用户下的表,提示表或试图不存在

今天在从另外一个服务器上把数据库的表导出,导入到另一个服务器上,重新启动工程的时候,发现一个很诡异的问题,

 

找到这个存储过程执行的时候,总是提示ORA-00942: table or view does not exist(ERROR -942 ORA-00942: 表或视图不存在)这个错误,但是我将这个SQL语句复制出来,单独在命令行运行,而又没有任何错误。很纠结,很纳闷,很无解,好好的一个SELECT语句,在命令行里就可以执行,放到存储过程就会出错了,怎么就不对了?后来经过各种百度、Google分析总结如下:角色在函数、存储过程、触发器中都是失效的,也就是说,用户从角色继承过来的权限,不能在函数、存储过程、触发器中使用。在函数、存储过程、触发器中,如果要访问其他用户的对象,需要显式地给用户授予访问的权限。所以要调用另外一个用户下的表的时候就需要单独在这个用户下对这个表进行赋权,例如a用户下的存储过程product_a要调用b用户下的table_b这个表,就需要单独给b用户下的这个表进行赋权,登录b用户,grant insert on t_photo to a;复制这个sql到中,执行,赋权成功,登录a用户,执行报错的存储过程,不在报错了。

 其他的(select,delete)等等 只需要对应sql修改就行。

 

 

 
posted @ 2018-01-11 16:10  啊啊喔喔smile~  阅读(2030)  评论(0编辑  收藏  举报