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