sql >> Database >  >> RDS >> Oracle

Hoe varchar met enkele aanhalingstekens door te geven aan Stored Proc in Oracle

Geef een verzameling door en geen string en gebruik MEMBER OF in plaats van 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;
/

Dan kun je het noemen als:

DECLARE
  vCount INTEGER;
BEGIN
  your_package.countPending(
    characterlist( 'A', 'B' ),
    vCount
  );
  DBMS_OUTPUT.PUT_LINE( vCount );
END;
/

U geeft een enkele tekenreeks door en geen lijst met waarden - dus de IN voorwaarde is testen om te zien of de PROVIDER kolom komt exact overeen met uw volledige invoertekenreeks en niet, zoals u aanneemt, met elk element van uw door aanhalingstekens gescheiden lijst.

 WHERE 'A' IN ( q'['A', 'B']' )

Komt nooit overeen omdat geen van beide 'A' is niet gelijk aan q'['A', 'B']' (of '''A'', ''B''' ) en de telling zal altijd nul zijn.

 WHERE 'A' IN ( 'A', 'B' )

Komt overeen, maar er zijn twee termen in de lijst met uitdrukkingen van de IN staat.



  1. Query-uitvoer met inspringing

  2. Het klassenpad voor JAR-bestanden instellen

  3. Hoe kan ik een lijst krijgen van alle functies die zijn opgeslagen in de database van een bepaald schema in PostgreSQL?

  4. Opgeslagen procedure-SQL-ontwikkelaar