Bạn có một số tùy chọn ở đây. Bạn có thể mở truy vấn của mình dưới dạng con trỏ rõ ràng và sau đó TÌM ... THU THẬP SỐ LƯỢNG LỚN VÀO một bộ sưu tập thích hợp; bạn có thể sử dụng THỰC HIỆN NGAY LẬP TỨC ... THU MUA SỐ LƯỢNG LỚN VÀO; hoặc, như bạn nói rằng bạn không muốn nghe, bạn có thể sử dụng DBMS_SQL.
Để sử dụng EXECUTE NGAY LẬP TỨC ... BULK COLLECT, bạn sẽ sử dụng thứ gì đó giống như
CREATE TABLE DATA_TABLE(FIELD1 NUMBER,
FIELD2 VARCHAR2(100));
INSERT INTO DATA_TABLE (FIELD1, FIELD2)
SELECT 1, 'ONE' FROM DUAL UNION ALL
SELECT 1, 'TWO' FROM DUAL UNION ALL
SELECT 2, 'THREE' FROM DUAL UNION ALL
SELECT 2, 'FOUR' FROM DUAL UNION ALL
SELECT 3, 'LAST' FROM DUAL;
DECLARE
TYPE typeCol IS TABLE OF DATA_TABLE%ROWTYPE;
colVals typeCol;
strField_name VARCHAR2(30) := 'FIELD1';
nField_val NUMBER := 2;
strQuery VARCHAR2(4000);
BEGIN
strQuery := 'SELECT * FROM DATA_TABLE WHERE ' || strField_name || '=' || nField_val;
DBMS_OUTPUT.PUT_LINE(strQuery);
EXECUTE IMMEDIATE strQuery BULK COLLECT INTO colVals;
FOR i IN colVals.FIRST..colVals.LAST LOOP
DBMS_OUTPUT.PUT_LINE(i || ': FIELD1=' || colVals(i).FIELD1 || ' FIELD2=' || colVals(i).FIELD2);
END LOOP;
END;
/
tài liệu tại đây (từ 10.1 - viết tốt hơn phiên bản sau IMO)