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

Oracle sử dụng một chuỗi bên trong điều kiện IN

in được sử dụng với collections , vì vậy chuỗi đầu vào của bạn trước tiên phải được chuyển đổi thành collection (bằng cách chia thành các hàng, dựa trên dấu phân cách bằng dấu phẩy)

Hãy thử một cái gì đó như thế này

Select * from employ where id = 12 and org_id in (
SELECT decode(:input_id,null,  (select  employ.org_id from dual) 
,TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)) )  
    FROM (SELECT  :input_id temp FROM DUAL)
    CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
    )

nhân tiện, org_id in () này sẽ trả về true if :input_idnull .

Một cách tiếp cận khác sẽ là tạo toàn bộ truy vấn dưới dạng một chuỗi trước và sau đó thực thi nó với execute immediate hoặc thông qua php . Tuy nhiên, điều này có thể tăng tiêm sql những mối quan tâm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm so với thủ tục trong Oracle

  2. Tạo trình kích hoạt cập nhật một cột trên một bảng khi một cột trong bảng khác được cập nhật

  3. Ngăn rơi bảng tại lược đồ mục tiêu trong luồng Oracle

  4. Cách chọn một nhóm các mục có liên quan trong Oracle SQL

  5. Oracle PL / SQL:cách lấy dấu vết ngăn xếp, tên gói và tên thủ tục