Lý tưởng nhất là thay vì chuyển vào một chuỗi đơn lẻ bao gồm các giá trị được phân tách bằng dấu phẩy, bạn sẽ chuyển vào một tập hợp. Nếu bạn có một cái gì đó giống như
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
thì bạn có thể chuyển bộ sưu tập đó vào thủ tục của mình và sử dụng nó trong WHERE
mệnh đề
CREATE OR REPLACE PROCEDURE procedure_name( p_values IN value_tbl )
AS
...
BEGIN
FOR i IN (SELECT *
FROM table_name
WHERE column_name IN (SELECT *
FROM TABLE( p_values )))
LOOP
...
END LOOP;
END;
Nếu bạn thực sự cần chuyển vào một chuỗi được phân tách bằng dấu phẩy, bạn có thể xác định cùng một loại tập hợp và sau đó phân tích cú pháp chuỗi để điền tập hợp bằng cách sử dụng một cái gì đó như str2tbl
củaTom Kyte chức năng
. Nhưng điều đó sẽ kém hiệu quả hơn so với việc chuyển qua một bộ sưu tập để bắt đầu.