sql >> Database teknologi >  >> RDS >> Oracle

Sådan sender du varchar med enkelte citater til Stored Proc i Oracle

Send en samling, ikke en streng, og brug MEMBER OF i stedet for 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;
/

Så kan du kalde det som:

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

Du sender en enkelt streng og ikke en liste over værdier - så IN tilstand tester for at se, om PROVIDER kolonne matcher nøjagtigt hele din inputstreng og ikke, som du antager, hvert element i din citerede afgrænsede liste.

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

Vil aldrig matche, da hverken 'A' er ikke lig med q'['A', 'B']' (eller '''A'', ''B''' ), og antallet vil altid være nul.

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

Vil matche, men der er to udtryk i udtrykslisten for IN tilstand.



  1. Begræns SQL ved summen af ​​rækkens værdi

  2. http://localhost/phppgadmin/ -> 403 Forbudt

  3. Hvad er LEN()-ækvivalenten i MySQL?

  4. postgres kolonne X eksisterer ikke