#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>, который отлично работал для моего локального разработчика.