Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

क्या जेडीबीसी का उपयोग कर किसी भी डेटा सिंक्रोनस कैप्चर कतार से हटाना संभव है?

आप एक संग्रहित प्रक्रिया लिख ​​सकते हैं और पीएल/एसक्यूएल में संदेश को हटा सकते हैं और इसे एक्सएमएल टेक्स्ट में परिवर्तित कर सकते हैं और इसे सीएलओबी के रूप में वापस कर सकते हैं। फिर आप जावा से JDBC के साथ संग्रहीत कार्यविधि को कॉल कर सकते हैं। जब प्लेन AQ API में फीचर की कमी थी, तब मैंने पहले भी इसी तरह के वर्कअराउंड का इस्तेमाल किया था।

उदाहरण:

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;

आउटपुट पैरामीटर के रूप में एक क्लॉब के साथ कॉल करने योग्य स्टेटमेंट के साथ जावा से कॉल करें और आपको जाने के लिए अच्छा होना चाहिए!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PLSQL में गोटो लेबल कमांड का उपयोग करके नियंत्रण को विशिष्ट लाइन पर पास करें

  2. एसक्यूएल कॉलम उपनाम को पहचान नहीं रहा है जहां खंड

  3. Oracle संख्या से C# दशमलव

  4. निम्नलिखित परिणाम प्राप्त करने के लिए दो तालिकाओं में कैसे शामिल हों?

  5. Oracle PL/SQL प्रक्रिया में त्रुटि