एक संग्रह पास करें न कि एक स्ट्रिंग और 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
. की अभिव्यक्ति सूची में दो शब्द हैं हालत।