एक संग्रह पास करें न कि एक स्ट्रिंग और MEMBER OF का उपयोग करें के बजाय IN :
CREATE OR REPLACE TYPE characterlist IS TABLE OF CHAR(1);
/
CREATE PACKAGE your_package AS
PROCEDURE countPending(
pProviderList IN characterlist
pCount OUT INTEGER
)
AS
BEGIN
SELECT COUNT(*)
INTO pCount
FROM FUND_CHANGE_REQUEST
WHERE STATUS IN ('PENDING_CHK', 'PEND_2ND_CHK')
AND PROVIDER MEMBER OF pProviderList;
END;
END;
/
तब आप इसे इस प्रकार कह सकते हैं:
DECLARE
vCount INTEGER;
BEGIN
your_package.countPending(
characterlist( 'A', 'B' ),
vCount
);
DBMS_OUTPUT.PUT_LINE( vCount );
END;
/
आप एक स्ट्रिंग पास कर रहे हैं न कि मानों की सूची - इसलिए IN हालत यह देखने के लिए परीक्षण कर रही है कि क्या PROVIDER कॉलम आपकी संपूर्ण इनपुट स्ट्रिंग से बिल्कुल मेल खाता है, न कि, जैसा कि आप मान रहे हैं, आपकी उद्धृत सीमांकित सूची के प्रत्येक तत्व।
WHERE 'A' IN ( q'['A', 'B']' )
'A' . के बाद से कभी भी मेल नहीं खाएगा q'['A', 'B']' . के बराबर नहीं है (या '''A'', ''B''' ) और गिनती हमेशा शून्य रहेगी।
WHERE 'A' IN ( 'A', 'B' )
मेल खाएगा लेकिन IN . की अभिव्यक्ति सूची में दो शब्द हैं हालत।