sql >> Databasteknik >  >> RDS >> Oracle

Hur man skickar varchar med enstaka citat till Stored Proc i Oracle

Skicka en samling inte en sträng och använd MEMBER OF istället för 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;
/

Då kan du kalla det som:

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

Du skickar en enda sträng och inte en lista med värden - så IN condition testar för att se om PROVIDER kolumnen matchar exakt hela din inmatningssträng och inte, som du antar, varje element i din citerade avgränsade lista.

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

Kommer aldrig att matcha eftersom varken 'A' är inte lika med q'['A', 'B']' (eller '''A'', ''B''' ) och antalet kommer alltid att vara noll.

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

Kommer att matcha men det finns två termer i uttryckslistan för IN skick.



  1. Ta bort en enskild post från Entity Framework?

  2. Varför Index används endast när det är påtvingat men inte som standard?

  3. PostgreSQL summa typecasting som en bigint

  4. Uppdatera databas med flera SQL-statement