Předejte kolekci, nikoli řetězec, a použijte MEMBER OF spíše než 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;
/
Pak to můžete nazvat jako:
DECLARE
vCount INTEGER;
BEGIN
your_package.countPending(
characterlist( 'A', 'B' ),
vCount
);
DBMS_OUTPUT.PUT_LINE( vCount );
END;
/
Předáváte jeden řetězec a ne seznam hodnot - tedy IN podmínkou je testování, zda PROVIDER sloupec přesně odpovídá celému vašemu vstupnímu řetězci a nikoli, jak předpokládáte, každému prvku vašeho seznamu s uvozovkami.
WHERE 'A' IN ( q'['A', 'B']' )
Nikdy se nebude shodovat, protože ani 'A' nerovná se q'['A', 'B']' (nebo '''A'', ''B''' ) a počet bude vždy nula.
WHERE 'A' IN ( 'A', 'B' )
Bude se shodovat, ale v seznamu výrazů IN jsou dva výrazy podmínka.