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

sử dụng các giá trị được phân tách bằng dấu phẩy bên trong mệnh đề IN cho cột NUMBER

Bạn có thực sự cần trả lại danh sách được phân tách bằng dấu phẩy không? Nói chung sẽ tốt hơn nhiều nếu khai báo một loại tập hợp

CREATE TYPE num_table
    AS TABLE OF NUMBER;

Khai báo một hàm trả về một phiên bản của bộ sưu tập này

CREATE OR REPLACE FUNCTION get_nums
  RETURN num_table
IS
  l_nums num_table := num_table();
BEGIN
  for i in 1 .. 10
  loop
    l_nums.extend;
    l_nums(i) := i*2;
  end loop;
END;

và sau đó sử dụng bộ sưu tập đó trong truy vấn của bạn

SELECT *
  FROM users_table
 WHERE user_id IN (SELECT * FROM TABLE( l_nums ));

Cũng có thể sử dụng SQL động (mà @Sebas trình bày). Tuy nhiên, nhược điểm của điều đó là mọi lệnh gọi đến thủ tục sẽ tạo ra một câu lệnh SQL mới cần được phân tích cú pháp lại trước khi nó được thực thi. Nó cũng gây áp lực lên bộ đệm thư viện, điều này có thể khiến Oracle xóa nhiều câu lệnh SQL có thể tái sử dụng khác, điều này có thể tạo ra nhiều vấn đề về hiệu suất khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt các biểu mẫu và báo cáo Oracle 11g Release 2

  2. Bảng ALTER &DROP DDL với việc thực thi ngay lập tức trong cơ sở dữ liệu Oracle

  3. Cập nhật Oracle bị treo

  4. Hàm SQRT () trong Oracle

  5. Làm cách nào để biết liệu cơ sở dữ liệu tiên tri có được đặt thành tự động gửi hay không?