आदर्श रूप से, अल्पविराम से अलग किए गए मानों से बनी एक स्ट्रिंग में गुजरने के बजाय, आप एक संग्रह में पास होंगे। अगर आपके पास ऐसा कुछ है
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
तो आप उस संग्रह को अपनी प्रक्रिया में पास कर सकते हैं और इसे WHERE
. में उपयोग कर सकते हैं खंड
CREATE OR REPLACE PROCEDURE procedure_name( p_values IN value_tbl )
AS
...
BEGIN
FOR i IN (SELECT *
FROM table_name
WHERE column_name IN (SELECT *
FROM TABLE( p_values )))
LOOP
...
END LOOP;
END;
यदि आपको वास्तव में अल्पविराम से अलग की गई स्ट्रिंग में पास करने की आवश्यकता है, तो आप उसी संग्रह प्रकार को परिभाषित कर सकते हैं और फिर स्ट्रिंग को पार्स कर संग्रह को पॉप्युलेट करने के लिए टॉम काइट का str2tbl
समारोह
. लेकिन यह शुरू करने के लिए एक संग्रह में पास करने से कम कुशल होने वाला है।