2016-10-10 45 views
1

似乎需要一些幫助。我試圖根據下面的腳本基於對象類型構建一些隊列表;Oracle高級隊列 - ORA-38818 - 對已編輯對象的非法引用

... 
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:非法參照editioned對象SCH_UTL.O_UTL_Q_LOG
ORA-06512:在 「SYS.DBMS_AQADM」,線81
ORA-06512:在第2行
38818. 00000 - 「非法參照editioned對象%s。%s「
*原因:試圖違反規則」未編制對象
可能不依賴於已編輯的對象。「

爲了以防萬一,我正在使用XE 11g R2。

非常感謝任何人的幫助!

回答

0

默認情況下,類型是可編輯的。嘗試:

create or replace noneditionable type o_utl_q_log as object... 

,而不是

create or replace type o_utl_q_log as object... 
+0

馬修,謝謝你的回答。看起來像這個不工作。我試圖按照下面的說法使用'不可訂閱'條款; – RafalK

+0

創建或替換不可定型的類型o_object_type作爲對象(attr數量) - 但我得到ora-00922丟失或無效的選項。任何其他想法? – RafalK

+0

啊...我看到你在11g上。 「無法使用」僅適用於12C。抱歉。我建議你嘗試的唯一方法就是在全新的用戶下創建一個類型 - 沒有啓用「EDITIONS」的用戶。 –