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

किसी प्रक्रिया में स्ट्रिंग्स की एक सरणी पास करना और IN . के साथ WHERE क्लॉज में इसका उपयोग करना

आपकी सरणी को SQL ऑब्जेक्ट प्रकार होना चाहिए, जो सीधे SQL में बनाया गया हो, पैकेज में घोषित PLSQL प्रकार नहीं:

SQL> CREATE OR REPLACE TYPE t_strarray IS TABLE OF VARCHAR2(30);
  2  /
Type created.

SQL> CREATE TABLE mytable (field1 VARCHAR2(30));
Table created.

SQL> INSERT INTO mytable VALUES ('A');
1 row created.

SQL> INSERT INTO mytable VALUES ('D');
1 row created.

SQL> CREATE OR REPLACE PROCEDURE getstuff(p_list IN t_strarray,
  2                                       io_cursor OUT SYS_REFCURSOR) IS
  3  BEGIN
  4     OPEN io_cursor FOR
  5        SELECT *
  6          FROM mytable
  7         WHERE mytable.field1 IN (SELECT COLUMN_VALUE FROM TABLE(p_list));
  8  END;
  9  /
Procedure created.

SQL> VARIABLE cc REFCURSOR;
SQL> EXEC getstuff (t_strarray('A', 'B', 'C'), :cc);    
PL/SQL procedure successfully completed.

SQL> print cc

FIELD1
------------------------------
A



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में MIN और MAX फ़ंक्शन का उपयोग करके 0 मानों से कैसे बचें?

  2. java.sql.SQLException:वाइल्डफ्लाई में अमान्य कॉलम इंडेक्स

  3. ऑरैकल में स्ट्रिंग के हिस्से को कैसे हटाएं

  4. जावा - कस्टम प्रकारों के साथ ऑरैकल प्रक्रिया को कैसे कॉल करें?

  5. एसक्यूएल * प्लस प्रॉम्प्ट से टेक्स्ट वैरिएबल कैसे स्वीकार करें?