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

गतिशील कर्सर Oracle

संक्षेप में, IN क्लॉज बाइंड वेरिएबल्स का समर्थन नहीं करता है। यह केवल वैल्यू के लिए सपोर्ट करता है, जिस तरह से आपने इस्तेमाल किया था।;

आपको जाने बिना, आपने बाइंड वेरिएबल्स का उपयोग किया है। एक समाधान REFCURSOR use का उपयोग करना है गतिशील रूप से एक क्वेरी स्ट्रिंग बनाकर।

DECLARE
 VAR1 VARCHAR2(500);
 CUR1 SYs_REFCURSOR;
 QUERY_STRING VARCHAR2(2000) := 'SELECT T.COL1 FROM TABLE1 T WHERE T.COL1 IN';

 MYREC IS RECORD 
 (
   COL1 VARCHAR(1000);
 );

 myrecord MYREC;

 BEGIN
  VAR1 := q'['V1','V2']';
  QUERY_STRING:= QUERY_STRING||'('||VAR1||')';

  OPEN CUR1 FOR QUERy_STRING;

    LOOP
      FETCH CUR1 INTO myrecord;
      DBMS_OUTPUT.PUT_LINE(myrecord.COL1);
      EXIT WHEN v_my_ref_cursor%NOTFOUND;
        ..
      -- your processing
    END LOOP;

  CLOSE CUR1;

END;

मेरे अन्य उत्तर में से एक बड़े IN क्लॉज सूची के लिए, संग्रह का उपयोग करने का दूसरा तरीका भी है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दो तालिकाओं का गैर-तुच्छ विलय

  2. नियमित अभिव्यक्ति का उपयोग करके जटिल स्ट्रिंग को विभाजित करना

  3. Oracle में दिए गए प्रारूप में समय अंतर को परिवर्तित करना

  4. किसी अन्य उपयोगकर्ता से तालिका से क्वेरी कॉलम नाम

  5. Oracle में क्वेरी सबक्वेरी के साथ चयन करने के लिए