2009-09-07 64 views
1

Oracle Advanced Queuing and dbms_aq package 經過一番爭執後,我遇到了另一個問題。我複製的代碼從Oracle教程 但是當我編譯此代碼:Oracle:構建JMS消息的問題

create or replace 
procedure jms_test(msg varchar2) 
is 
    id     pls_integer; 
    message   sys.aq$_jms_stream_message; 
    enqueue_options dbms_aq.enqueue_options_t; 
    message_properties dbms_aq.message_properties_t; 
begin 
    message := sys.aq$_jms_stream_message.construct(0); 
    message.set_string_property('FROM', 'TEST'); 
    id := message.clear_body(-1); 
end; 

它抱怨:

Error(9,40): PLS-00302: component 'CONSTRUCT' must be declared 
Error(10,10): PLS-00302: component 'SET_STRING_PROPERTY' must be declared 
Error(11,16): PLS-00302: component 'CLEAR_BODY' must be declared 

我覺得這個代碼工作進行過程主體的,因爲我曾嘗試與成功從 食譜What's in my JMS queue

我的Oracle版本是: Oracle9i企業版發行9.2.0.1.0 - 生產

任何想法可能是錯誤的?

回答

2

看起來像數據庫版本問題。 AQ $ _JMS_STREAM_MESSAGE在10G中有構造方法,但在9i中沒有。你使用的是什麼版本的Oracle服務器?

+0

對不起,版本在您的文章中。所以你的代碼probaly不會運行在Oracle 9i數據庫 – Rene 2009-09-07 13:20:25

+0

+1好點。 – cagcowboy 2009-09-07 13:24:50

+0

是的,這可能是版本問題。我沒有從Oracle手冊中檢查版本信息。謝謝! – 2009-09-08 04:56:06

1

貌似補助再次

GRANT EXECUTE ON SYS.aq$_jms_stream_message To <your-user>; 

請問:

desc sys.aq$_jms_stream_message 

在SQL * Plus同時從SYS +您的架構的工作?

注意SYS.AQ $ _JMS_STREAM_MESSAGE是datbase對象/類型,而SYS.DBMS_AQ是包

編輯

好吧......也許TYPE體缺少/無效。這是什麼:

SELECT owner, object_name, object_type, status 
FROM dba_OBJECTS 
WHERE OBJECT_NAME = 'AQ$_JMS_STREAM_MESSAGE' 

return?

+0

GRANT成功,desc從兩個模式都可以使用,但函數無法編譯。 – 2009-09-07 12:50:16

+0

選擇結果:SYS,AQ $ _JMS_STREAM_MESSAGE,TYPE,VALID – 2009-09-08 04:52:41