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

Truy vấn với các tham số IN được phân tách bằng dấu phẩy trong PLSQL

SELECT * FROM Table1 WHERE   
Table1.PRODUCT LIKE ( select regexp_substr(I_PRODUCT,'[^,]+', 1, level) from dual
                     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null);

THÍCH toán tử sẽ không thành công trong truy vấn trên. Bạn cần sử dụng IN , nội bộ sẽ được đánh giá là nhiều HOẶC .

Table1.PRODUCT IN ( select regexp_substr(I_PRODUCT,'[^,]+', 1, level) from dual
                     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null);

Ngoài ra, liên quan đến thay đổi danh sách IN , hãy xem câu trả lời của tôi tại đây .

Cập nhật

Dựa trên nhận xét của OP.

Sửa đổi truy vấn thành:

WITH str_search AS
(
     select regexp_substr(I_PRODUCT,'[^,]+', 1, level) pattern from dual
     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null
)
SELECT   *
FROM     Table1
WHERE     EXISTS (
          SELECT     NULL
          FROM     str_search
          WHERE     tab.col     LIKE pattern
                 );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để tạo và thực hiện một truy vấn động trong thủ tục được lưu trữ oracle?

  2. làm thế nào để kích hoạt cập nhật giá trị hàng trong bảng bằng cách sử dụng giá trị hàng từ một bảng khác trong Apex Oracle SQL?

  3. Cách hủy một câu lệnh SELECT đang chạy

  4. OracleConnection đang ném ra ngoại lệ trống

  5. Cú pháp nối ngoài Oracle