идентификатор оракула 'ctx_ddl' должен быть объявлен - добавление dbms_job - PullRequest
1 голос
/ 28 марта 2011

Я добавил индекс в свою таблицу с помощью команды:
CREATE INDEX patient_index ON radiology_record(patient_name) INDEXTYPE IS CTXSYS.CONTEXT;

И я пытаюсь добавить DBMS_JOB, чтобы поддерживать его в актуальном состоянии.
СпособЯ запускаю этот скрипт, вызывая "@ myscript.sql" из SQLPLUS

set serveroutput on 
declare
   job number; 
begin
   dbms_job.submit(job, 'ctx_ddl.sync_index(''patient_index'');',
                  interval=>'SYSDATE+1/1440');   
   commit;
   dbms_output.put_line('job '||job||'has been submitted.'); 
 end;
 /

В результате получается ошибка PLS-00201: identifier 'CTX_DDL' must be declared

В результате поиска я нашел кого-то сподобная проблема и его решение было

Я потратил достаточно времени на отладку этого, и мне показалось, что это заслуживает того, чтобы поделиться тем, что я узнал.Оказывается, dbms_jobs наследует только привилегии пользователя схемы по умолчанию, а не любые привилегии, которые он может наследовать от ролей, предоставленных этому пользователю.Это означает, что задание не будет запускаться с привилегией ctxsys, которую вы должны были предоставить пользователю схемы.Так что это значит?Это означает, что вы должны запустить задание от имени пользователя ctxsys

Я, к сожалению, не могу использовать это, чтобы предоставить себе привилегии, так как да, это домашняя работа, и у меня нет разрешений на выполнение на ctx_ddlдля себя.

Кто-нибудь знает, как мне решить эту проблему?В противном случае я буду ждать до конца этой недели и проконсультироваться с ТА.
Спасибо

1 Ответ

3 голосов
/ 28 марта 2011

Я не думаю, что есть обходной путь, так как документация DBMS_JOB явно определяет это ограничение:

Вы можете выполнять процедуры, принадлежащие пользователю или длякоторый пользователю явно предоставлен EXECUTE.Однако процедуры, для которых пользователю предоставлена ​​привилегия на выполнение через роли, не могут быть выполнены.

...