Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách chuyển varchar với các dấu nháy đơn đến Stored Proc trong Oracle

Chuyển một bộ sưu tập không phải là một chuỗi và sử dụng MEMBER OF thay vì 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;
/

Sau đó, bạn có thể gọi nó là:

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

Bạn đang chuyển một chuỗi đơn lẻ chứ không phải danh sách các giá trị - vì vậy IN điều kiện đang thử nghiệm để xem liệu PROVIDER cột đối sánh chính xác với toàn bộ chuỗi đầu vào của bạn và không khớp với từng phần tử trong danh sách được phân tách được trích dẫn của bạn.

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

Sẽ không bao giờ khớp vì cả 'A' không bằng q'['A', 'B']' (hoặc '''A'', ''B''' ) và số lượng sẽ luôn bằng không.

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

Sẽ khớp nhưng có hai thuật ngữ trong danh sách biểu thức của IN điều kiện.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Máy khách tức thì Oracle:ORA-28759:không mở được tệp

  2. làm thế nào để nhân bản kết quả sql của tôi?

  3. Ora_hash có xác định không?

  4. Cách chọn các bản ghi được nhóm theo giờ trong ngày kể cả những giờ không có bản ghi

  5. flyway clean không làm mất các công việc hoặc chương trình của người lập lịch