ORA-00942:表或视图不存在(当单独的sql工作,但在oracle函数内不起作用)

Vic*_*tor 24 sql oracle oracle9i ora-00942

当我有一个类似的sql语句时select * from table1,它工作得很好,但是只要我把它放到一个函数中,我得到:

ORA-00942: table or view does not exist 
Run Code Online (Sandbox Code Playgroud)

怎么解决这个?

Ste*_*erg 36

从table1中选择的权限很可能已授予角色,并且该角色已授予您.授予角色的权限不可用于用户编写的PL/SQL,即使用户已被授予该角色.

对于已在sys拥有的对象上被授予dba角色的用户,您会看到很多.具有dba角色的用户将能够SELECT * from V$SESSION,但是,将无法编写包含的功能SELECT * FROM V$SESSION.

修复是直接向用户授予对相关对象的显式权限,例如,在上面的情况下,SYS用户必须 GRANT SELECT ON V_$SESSION TO MyUser;


Raj*_*thi 16

你可以看一些东西.根据您的问题,看起来函数所有者与表所有者不同.

1)通过角色授予:为了在另一个用户的对象上创建存储过程和函数,您需要直接访问对象(而不是通过角色访问).

2)

默认情况下,存储过程和SQL方法使用其所有者的权限执行,而不是使用其当前用户.

如果您在Schema A中创建了一个表,而在Schema B中创建了该函数,那么您应该查看Oracle的Invoker/Definer Rights概念,以了解可能导致该问题的原因.

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#LNPLS00809


Adr*_*iro 5

确保该函数与表位于相同的数据库架构中。