Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara meneruskan varchar dengan tanda kutip tunggal ke Stored Proc di Oracle

Lewati koleksi bukan string dan gunakan MEMBER OF daripada 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;
/

Kemudian Anda dapat menyebutnya sebagai:

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

Anda meneruskan satu string dan bukan daftar nilai - jadi IN kondisi sedang menguji untuk melihat apakah PROVIDER kolom sama persis dengan seluruh string input Anda dan tidak, seperti yang Anda asumsikan, setiap elemen dari daftar delimited yang Anda kutip.

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

Tidak akan pernah cocok karena keduanya 'A' tidak sama dengan q'['A', 'B']' (atau '''A'', ''B''' ) dan hitungannya akan selalu nol.

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

Akan cocok tetapi ada dua istilah dalam daftar ekspresi IN kondisi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara bekerja dengan Fungsi tanggal di Oracle sql

  2. Bagaimana cara menggunakan perbedaan dan penjumlahan keduanya di Oracle?

  3. Apa perbedaan antara koneksi driver OCI dan THIN dengan koneksi sumber data antara Java dan Oracle XE?

  4. CachedRowSet lebih lambat dari ResultSet?

  5. Kueri menggunakan pernyataan dalam kolom VARCHAR2