Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apakah mungkin untuk melakukan dequeue dari antrian ANYDATA Synchronous Capture menggunakan JDBC?

Anda dapat menulis prosedur tersimpan dan menghapus antrean pesan dalam PL/SQL dan mengubahnya menjadi teks XML dan mengembalikannya sebagai CLOB. Kemudian Anda dapat memanggil prosedur tersimpan dari Java dengan JDBC. Saya telah menggunakan solusi serupa sebelumnya ketika API AQ biasa tidak memiliki fitur.

Contoh:

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;

Ini berfungsi ketika saya memanggilnya dari PL/SQL dengan antrian dan konsumen yang tepat:

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;

Lakukan saja panggilan dari Java dengan CallableStatement dengan clob sebagai parameter output dan Anda akan siap melakukannya!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL Developer menyalin database langkah demi langkah

  2. File .sql tidak mengembalikan header kolom dalam file csv

  3. Bagaimana cara mengatur variabel ORACLE_HOME dengan benar di Ubuntu 9.x?

  4. Oracle SQL Error:Parameter IN atau OUT hilang pada indeks::1

  5. Bagaimana menjalankan fungsi dbms_crypto di Oracle sebagai pengguna biasa?