2011-10-24 35 views
1

我有一个可以在另一个11g环境中编译好的包。
当我尝试在具有DBA用户的XE 10g环境中编译它时,出现ORA-00942错误。Oracle XE 10g:包或程序中的作业调度:DBA_SCHEDULER_JOBS

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 

回答

1

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

你可能想授予此过程的所有者的SELECT ANY DICTIONARY特权

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

你也可以授予每个对象的权限(即DBA_SCHEDULER_JOBS)的个体,但如果你已经授予该用户的特权SYSDBA ,你可能不太在乎限制赠款。

+0

谢谢,GRANT选择任何字典到完美适合我的本地DEV。 – ScrappyDev