1

我有一个可以在另一个 11g 环境中编译的包。
当我尝试在带有 DBA 用户的 XE 10g 环境中编译它时,我收到 ORA-00942 错误。

   FOR r IN (SELECT DISTINCT job_name jname
                        FROM dba_scheduler_jobs
                             ^
                       WHERE job_name LIKE p_job_prefix || '%')
   LOOP
      ...

当我在表上执行直接选择时没有问题。

   Select * from dba_scheduler_jobs;

错误文本:

   Line: 34 Column: 34  Error: PL/SQL: ORA-00942: table or view does not exist
4

1 回答 1

1

为了在定义者权限存储过程(默认)中引用对象,过程的所有者必须直接访问该对象。权限不能通过角色授予,即使是非常强大的角色,如SYSDBA.

您可能希望授予此过程的所有者SELECT ANY DICTIONARY特权

GRANT select any dictionary
   TO <<owner of procedure>>

您也可以单独授予每个对象(即DBA_SCHEDULER_JOBS)的权限,但如果您已经授予此用户SYSDBA权限,您可能不会过度关注限制授予。

于 2011-10-24T16:19:08.100 回答