Oracle XE 10g: планирование заданий без пакета или процедуры: DBA_SCHEDULER_JOBS

#oracle #plsql #job-scheduling

#Oracle #plsql #планирование заданий

Вопрос:

У меня есть пакет, который отлично компилируется в другой среде 11g.
Когда я пытаюсь скомпилировать его в своей среде XE 10g без пользователя DBA, я получаю ошибку 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
 

Ответ №1:

Чтобы ссылаться на объект в хранимой процедуре с правами определителя (по умолчанию), владелец процедуры должен иметь прямой доступ к объекту. Привилегия не может быть предоставлена через роль, даже очень мощную роль, например SYSDBA .

Вероятно, вы хотите предоставить владельцу этой процедуры SELECT ANY DICTIONARY привилегию

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

Вы также можете предоставить привилегии каждому объекту (т. Е. DBA_SCHEDULER_JOBS ) по отдельности, но если вы уже предоставили этому пользователю SYSDBA привилегию, вы, вероятно, не слишком обеспокоены ограничением грантов.

Комментарии:

1. Спасибо, ПРЕДОСТАВЬТЕ выбрать любой словарь ДЛЯ <user>, который отлично работал для моего локального разработчика.