Lewati koleksi bukan string dan gunakan MEMBER OF
daripada 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;
/
Kemudian Anda dapat menyebutnya sebagai:
DECLARE
vCount INTEGER;
BEGIN
your_package.countPending(
characterlist( 'A', 'B' ),
vCount
);
DBMS_OUTPUT.PUT_LINE( vCount );
END;
/
Anda meneruskan satu string dan bukan daftar nilai - jadi IN
kondisi sedang menguji untuk melihat apakah PROVIDER
kolom sama persis dengan seluruh string input Anda dan tidak, seperti yang Anda asumsikan, setiap elemen dari daftar delimited yang Anda kutip.
WHERE 'A' IN ( q'['A', 'B']' )
Tidak akan pernah cocok karena keduanya 'A'
tidak sama dengan q'['A', 'B']'
(atau '''A'', ''B'''
) dan hitungannya akan selalu nol.
WHERE 'A' IN ( 'A', 'B' )
Akan cocok tetapi ada dua istilah dalam daftar ekspresi IN
kondisi.