これについては助けが必要なようです。以下のスクリプトに従って、オブジェクト タイプに基づいてキュー テーブルを作成しようとしています。
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 に取り組んでいます。
誰にでも助けてくれてありがとう!