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

एक SYS_REFCURSOR . में एक गतिशील एसक्यूएल कथन निष्पादित करना

आपको पैरामीटर pAge bind को बाइंड करना होगा और pPostcode . डायनेमिक SQL में आप उन्हें एक कोलन (: . के साथ उपसर्ग करेंगे ) यदि आप EXECUTE IMMEDIATE . का उपयोग करते हैं या OPEN ... FOR , आप अपने मापदंडों को स्थिति के माध्यम से बांधेंगे, यही कारण है कि मैंने उनका नाम बदल दिया :P1 और :P2 उदाहरण में:

DECLARE
   lsql VARCHAR2(500) := 'SELECT c.id 
                            FROM carer c, cared_for cf, carer_cared_for ccf 
                           WHERE c.id = ccf.carer_id (+)
                             AND cf.id (+) = ccf.cared_for_id';
BEGIN
   IF pPostcode IS NULL THEN
      lsql := lsql || ' AND :P1 IS NULL';
   ELSE
      lsql := lsql || ' AND c.postcode like ''%''|| upper(:P1)||''%''';
   IF pPostcode pAge > 0 THEN
      lsql := lsql || ' AND :P2 = ROUND((MONTHS_BETWEEN(sysdate,
                                                        c.date_of_birth)/12))';
   ELSE
      lsql := lsql || ' AND nvl(:P2, -1) <= 0';
   END IF;
   OPEN pReport FOR lsql USING pPostcode, pAge;
END;

नोट:संकलन के समय बाइंड वैरिएबल की संख्या और स्थिति का पता होना चाहिए , यही कारण है कि मैं अक्सर उपरोक्त निर्माण का उपयोग करता हूं (पैरामीटर को अपनी स्थिति में जोड़ना, भले ही इसका उपयोग न किया गया हो)। एक तनातनी जोड़ना (जैसा कि AND :P1 IS NULL . में है ) किसी प्रश्न के लिए उसकी व्याख्या योजना को प्रभावित नहीं करेगा।



  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

  2. पीएल/एसक्यूएल में बूलियन का प्रयोग

  3. Oct2014CPU, ArcGIS डेस्कटॉप को क्रैश करता है

  4. INSERT विवरण पर मान्य माह नहीं है

  5. अनुवर्ती प्रश्न:Oracle तालिका में पंक्तियों की तुलना करें और मिलान पंक्तियों को अपडेट करें