Oracle高级队列 - ORA-38818 - 对已编辑对象

时间:2016-10-10 16:36:01

标签: oracle plsql advanced-queuing

似乎需要一些帮助。我试图根据下面的脚本基于对象类型构建一些队列表;

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:at" SYS.DBMS_AQADM",第81行 ORA-06512:第2行 38818. 00000 - "非法引用已编辑的对象%s。%s"
*原因:试图违反规则"未加工的对象
           可能不依赖于已编辑的对象。"

以防万一,我正在使用XE 11g R2。

非常感谢任何人的帮助!

1 个答案:

答案 0 :(得分:0)

默认情况下,类型是可编辑的。尝试:

create or replace noneditionable type o_utl_q_log as object...

而不是

create or replace type o_utl_q_log as object...