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 回答