2009-09-04 13 views
2

Oracle 9.2およびJMSに問題があります。 XMLテキスト(ファイルまたはCLOBから)をキュー に送信するPL/SQLルーチンを作成しましたが、このルーチンはコンパイルされません。OracleのPL/SQLファンクションでDBMS_AQが表示されない

私のコードは、(省略充填メッセージ)のようになります。

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; 
    msgid raw(16); 

    java_exp   exception; 
    v_filehandle_input utl_file.file_type; 
    v_newline  varchar2(32767); 
    pragma exception_init(java_exp, -24197); 
begin 
    message := sys.aq$_jms_stream_message.construct; 
    message.set_string_property('FROM', 'TEST'); 
    id := message.clear_body(-1); 
end; 

とOracleがいることraports:

Error(6,21): PLS-00201: identifier 'DBMS_AQ' must be declared 

は、私はいくつかのニュースグループを見て、私が発見したすべてを試みたが、成功しません。 (成功で)多くのpermisions

  • ユーザーにGRANTリソースを付与

    1. GRANT CONNECT TO user;
    2. ユーザーに付与するすべての手順を実行します。
    3. GRANT aq_administrator_role TO user;
    4. GRANT aq_user_role TO user;
    5. GRANT EXECUTE ON dbms_aqadm TOユーザー;
    6. GRANT EXECUTE ON dbms_aq TOユーザー;
    7. GRANT EXECUTE ON dbms_aqin TOユーザー;
  • 降順DBMS_AQはDEQUEUE、ENQUEUE、のような多くの機能がSQLPlusを両方catqueue.sqlで実行

  • をLISTEN示し、

  • 誰もが間違っている可能性がどのような考えを持ってdbmsaq.plb?

    EDITED

    私はすべてのことを行うことができますに記述されている:http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html、そうDBMS_AQは、私の手順で何とか見えますが、ではありません。

    +1

    明確にする: "desc dbms_aq"をプロシージャをコンパイルする同じユーザーとして実行しましたか? –

    +0

    はい、同じSQLDeveloperセッションで実行されました。 –

    答えて

    6

    あなたがしなければ、それは動作します...

    SYS.DBMS_AQ 
    

    だけではなく

    DBMS_AQ 
    

    もしそうなら、あなたは同義語を逃しています。

    EDIT

    あなたが今取得している場合は、 "PLS-00201:識別子「SYS.DBMS_AQは" その後、私はあなたの助成金を再確認したいです。

    GRANT EXECUTE ON SYS.DBMS_AQ to <your-user>; 
    

    はまた、単に確認するためには、ユーザーに直接特権 を実行する許可され、そしてない役割を経由してきましたか?

    +0

    いいえ。SQL Developerでsysを追加しました。コード補完はdbms_aqを提案しますが、その後はAQ $ _DEQUEUE()、...、UNREGISTER(...)の中から選択できますが、enqueue_options_tやmessage_properties_tはありません。 –

    +0

    sysを追加した後。エラー(6,21):PLS-00201:識別子 'SYS.DBMS_AQ'を宣言する必要があります –

    +0

    sysuserからsysdbaというユーザーではなくsysユーザーから付与した後で動作します。ありがとう! –

    0

    ストアドプロシージャでオブジェクトを使用するには、WITH GRANT OPTIONを許可する必要があります。

    この場合には、灰色があります。 GRANT EXECUTE ON SYS.DBMS_AQ WITH GRANT OPTION to;

    関連する問題