sql >> データベース >  >> RDS >> Oracle

JDBCを使用してANYDATA同期キャプチャキューからデキューすることは可能ですか?

    ストアド・プロシージャを記述し、メッセージをPL / SQLでデキューして、XMLテキストに変換し、CLOBとして返すことができます。次に、JDBCを使用してJavaからストアドプロシージャを呼び出すことができます。プレーンなAQAPIに機能がなかったとき、私は以前に同様の回避策を使用しました。

    例:

    create or replace procedure dequeue_lcr(
        p_queue_name   varchar2,
        p_consumer     varchar2,
        p_wait_seconds number,
        p_lcr          out clob) as
      deq_lcr     anydata;
      deq_xml     xmltype;
      msgid       raw(16); 
      deqopt      dbms_aq.dequeue_options_t; 
      mprop       dbms_aq.message_properties_t;
      no_messages exception; 
      pragma exception_init (no_messages, -25228);
    begin
      deqopt.consumer_name := p_consumer;
      deqopt.wait := p_wait_seconds;
      deqopt.navigation := dbms_aq.first_message;
      deqopt.dequeue_mode  := dbms_aq.remove;
      begin
        dbms_aq.dequeue( 
          queue_name         =>  p_queue_name,
          dequeue_options    =>  deqopt,
          message_properties =>  mprop,
          payload            =>  deq_lcr,
          msgid              =>  msgid);
         deq_xml := dbms_streams.convert_lcr_to_xml(deq_lcr);
         p_lcr := deq_xml.getclobval();    
         commit;
      exception
        when no_messages then
          p_lcr := null;
      end;
    end;
    

    これは、適切なキューとコンシューマを使用してPL/SQLから呼び出すと機能します。

    declare
      v_clob clob;
    begin
      dequeue_lcr('aqtest.hcb_queue_any', 'LOCAL_AGENT', 5, v_clob);
      if (v_clob is not null) then
        dbms_output.put_line('Data: ' || v_clob);
      else
        dbms_output.put_line('No messages');  
      end if;
    end;
    

    出力パラメーターとしてclobを使用してCallableStatementを使用してJavaから呼び出しを行うだけで、準備が整います。




    1. SQLiteデータベースの特定の行を削除するにはどうすればよいですか?

    2. JPA結合列名を指定するにはどうすればよいですか?

    3. JaccardIndexを使用したDjangoMovieRecommendationアプリの作成

    4. Asp Classic ConnectionString500-内部サーバーエラー