#oracle #plsql #advanced-queuing
#Oracle #plsql #продвинутый -постановка в очередь #дополнительно -постановка в очередь
Вопрос:
Похоже, нужна некоторая помощь в этом вопросе. Я пытаюсь создать некоторую таблицу очередей на основе типа объекта в соответствии с приведенным ниже сценарием;
0.
...
GRANT EXECUTE ON dbms_aq TO sch_utl
/
GRANT EXECUTE ON dbms_aqadm TO sch_utl
/
GRANT aq_administrator_role TO sch_utl
/
BEGIN
DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE(privilege => 'MANAGE_ANY'
,grantee => 'sch_utl'
,admin_option => FALSE);
END;
/
1.
create or replace type o_utl_q_log as object
(/*some variables*/
constructor function o_utl_q_log return self as result,
member procedure queue_enqueue,
static function queue_dequeue(p_wait number default 0)
return o_utl_q_log,
);
2.
create or replace type body o_utl_q_log
(
...
);
Тип и его тело компилируются без ошибок, проблема возникает, когда;
3.
begin
dbms_aqadm.create_queue_table( queue_table => 't_utl_q_log'
, queue_payload_type => 'o_utl_q_log'
, sort_list => 'PRIORITY,ENQ_TIME'
, storage_clause => 'tablespace TS_UTL_Q_TABLE_LOG'
, comment => 'Log queue table') ;
end;
Я получаю это описание ошибки;
ORA-38818: незаконная ссылка на отредактированный объект SCH_UTL.O_UTL_Q_LOG
ORA-06512: в «SYS.DBMS_AQADM», строка 81
ORA-06512: в строке 2
38818. 00000 — «незаконная ссылка на отредактированный объект %s.%s»
* Причина: была предпринята попытка нарушить правило «Неотредактированный объект
не может зависеть от отредактированного объекта».
На всякий случай я работаю над XE 11g R2.
Большое спасибо всем за любую помощь!
Ответ №1:
По умолчанию типы доступны для редактирования. Попробуйте:
create or replace noneditionable type o_utl_q_log as object...
вместо
create or replace type o_utl_q_log as object...
Комментарии:
1. Мэтью, спасибо тебе за твой ответ. Похоже, что этот вариант не работает. Я попытался использовать предложение ‘noneditionable’ согласно приведенному ниже;
2. создайте или замените не подлежащий редактированию тип o_object_type как объект (номер attr) — но я получаю ora-00922 отсутствующий или недопустимый параметр. Есть еще идеи?
3. Ах … я вижу, вы на 11g.
NONEDITIONABLE
работает только в 12c. Извините. Единственное, что я могу предложить вам попробовать, — это создать тип под совершенно новым пользователем, у которого нетEDITIONS
enabled.