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

पीएल/एसक्यूएल - पाइपलाइन किए गए फ़ंक्शन में तत्काल निष्पादित करें

डायनेमिक SQL और पाइपलाइन फ़ंक्शन को संयोजित करना संभव है, लेकिन रिटर्न प्रकार डायनेमिक नहीं होगा:लौटाए गए कॉलम की संख्या और प्रकार तय हो जाएंगे।

आप तत्काल निष्पादित बल्क कलेक्ट . के साथ (धन्यवाद @be here now ), डायनामिक कर्सर या DBMS_SQL एक से अधिक पंक्ति वापस करने के लिए। यहाँ एक गतिशील कर्सर के साथ एक उदाहरण दिया गया है:

SQL> CREATE OR REPLACE PACKAGE pkg AS
  2     TYPE test_tab IS TABLE OF test%ROWTYPE;
  3     FUNCTION dynamic_cursor(l_where VARCHAR2) RETURN test_tab PIPELINED;
  4  END;
  5  /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY pkg IS
  2     FUNCTION dynamic_cursor(l_where VARCHAR2) RETURN test_tab PIPELINED IS
  3        cc sys_refcursor;
  4        l_row test%ROWTYPE;
  5     BEGIN
  6        OPEN cc FOR 'SELECT * FROM test WHERE ' || l_where;
  7        LOOP
  8           FETCH cc INTO l_row;
  9           EXIT WHEN cc%NOTFOUND;
 10           PIPE ROW (l_row);
 11        END LOOP;
 12        RETURN;
 13     END;
 14  END;
 15  /

Package body created.

आइए इस गतिशील फ़ंक्शन को कॉल करें:

SQL> SELECT *
  2    FROM TABLE(pkg.dynamic_cursor('id <= 2'));

        ID DAT
---------- ---
         1 xxx
         2 xxx

हमेशा की तरह गतिशील SQL के साथ, SQL Injection से सावधान रहें ।



  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. सी # त्रुटि ओआरए 00907:सही कोष्ठक गुम है

  3. एसक्यूएल अपडेट के लिए लॉक की गई क्वेरी और जावा मल्टी थ्रेडिंग छोड़ें - इसे कैसे ठीक करें

  4. Oracle प्रपत्रों में कस्टम लॉगिन स्क्रीन बनाना 10g

  5. SSRS में Oracle संग्रहीत कार्यविधि निष्पादित करते समय त्रुटि:PLS-00306:कॉल करने के लिए गलत संख्या या तर्कों के प्रकार