Anda memiliki beberapa opsi di sini. Anda dapat membuka kueri Anda sebagai kursor eksplisit dan kemudian FETCH...BULK COLLECT INTO koleksi yang sesuai; anda dapat menggunakan EXECUTE IMMEDIATE...BULK COLLECT INTO; atau, seperti yang Anda katakan tidak ingin Anda dengar, Anda dapat menggunakan DBMS_SQL.
Untuk menggunakan EXECUTE IMMEDIATE...BULK COLLECT, Anda akan menggunakan sesuatu seperti
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;
/
dokumen di sini (dari 10.1 - penulisan yang lebih baik daripada versi IMO yang lebih baru)