1

これについては助けが必要なようです。以下のスクリプトに従って、オブジェクト タイプに基づいてキュー テーブルを作成しようとしています。

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 に取り組んでいます。

誰にでも助けてくれてありがとう!

4

1 に答える 1

1

デフォルトでは、型は編集可能です。試す:

create or replace noneditionable type o_utl_q_log as object...

それ以外の

create or replace type o_utl_q_log as object...
于 2016-10-10T17:26:08.370 に答える