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

Oracle संग्रहीत कार्यविधि में स्ट्रिंग का उपयोग करना

जहां तक ​​मैं आपकी समस्या को समझता हूं, आपको इनपुट के रूप में अल्पविराम-सीमांकित स्ट्रिंग को स्वीकार करने के लिए एक विधि की आवश्यकता है, इसे पूर्णांकों के संग्रह में विभाजित करें और फिर इस संग्रह में मानों के साथ एक संख्या (पढ़ें:पूर्णांक) की तुलना करें।

Oracle मुख्यतः तीन प्रकार के संग्रह की पेशकश करता है - वरेज , नेस्टेड टेबल और सहयोगी सरणियाँ . मैं समझाऊंगा कि अल्पविराम-सीमांकित स्ट्रिंग को नेस्टेड तालिका में कैसे परिवर्तित किया जाए और क्वेरी या तुलना करने के लिए इसका उपयोग किया जाए।

सबसे पहले, आपको स्कीमा में ऑब्जेक्ट प्रकार को परिभाषित करने की आवश्यकता है। आप इस प्रकार का उपयोग करके केवल तभी प्रश्न लिख सकते हैं जब आप इसे स्कीमा स्तर पर परिभाषित करते हैं।

CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/

CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/

इसके बाद, एक फ़ंक्शन को इस तरह परिभाषित करें:

FUNCTION comma_to_nt_integer (p_comma_delimited_str IN VARCHAR)
    RETURN entity_id_set IS
    v_table     entity_id_set;
BEGIN
    WITH temp AS (SELECT TRIM(BOTH ',' FROM p_comma_delimited_str) AS str FROM DUAL)
        SELECT ENTITY_ID(TRIM (REGEXP_SUBSTR (t.str,
                                    '[^,]+',
                                    1,
                                    LEVEL)))
                   str
          BULK COLLECT INTO v_table
          FROM temp t
    CONNECT BY INSTR (str,
                      ',',
                      1,
                      LEVEL - 1) > 0;

    RETURN v_table;
END comma_to_nt_integer;

आप इस कार्य के लिए आवश्यक डीडीएल के साथ कर रहे हैं। अब, आप बस अपनी क्वेरी इस प्रकार लिख सकते हैं:

SELECT *
  FROM ..  
 WHERE ...
       AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));


  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. Oracle में हमेशा 2 दशमलव स्थान प्राप्त करने का सबसे अच्छा तरीका क्या है?

  3. क्या ऑब्जेक्ट प्रकार की तालिका में चयन करना संभव है?

  4. Oracle सबक्वेरी में आदेश के बाद शीर्ष पंक्ति प्राप्त करें

  5. Sql:क्लॉज के बीच ऑप्टिमाइज़ करना