Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да предадете varchar с единични кавички към Stored Proc в Oracle

Предайте колекция, а не низ и използвайте MEMBER OF вместо 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;
/

Тогава можете да го извикате като:

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

Вие предавате единичен низ, а не списък със стойности - така че IN условието тества дали PROVIDER колона съвпада точно с целия ви входен низ, а не, както предполагате, с всеки елемент от вашия разделен списък с кавички.

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

Никога няма да съвпадне, тъй като нито 'A' не е равно на q'['A', 'B']' (или '''A'', ''B''' ) и броят винаги ще бъде нула.

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

Ще съвпадне, но има два термина в списъка с изрази на IN състояние.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличане на Oracle от xml съкращаваща стойност

  2. Как да покажа размера на схемата на Oracle със SQL заявка?

  3. Как да направите графика с помощта на PHP от oracle

  4. Динамична заявка с HibernateCritera API и Oracle - производителност

  5. Вмъкването на национални знаци в колона NCHAR или NVARCHAR на оракул не работи