Вы можете использовать процедуру BIND_ARRAY в пакете DBMS_SQL для выполнения массовой выборки. пример этого приведен в документации к DBMS_SQL.
Однако, если нет особой необходимости использовать DBMS_SQL (и, если предположить, что динамический SQL на самом деле необходим в первую очередь), кажется,вероятно, что было бы проще использовать собственный динамический SQL, т.е.
EXECUTE IMMEDIATE 'SELECT col1, col2 FROM tableName WHERE criteria = :1'
BULK COLLECT INTO l_col1_collection, l_col2_collection
USING l_criteria_variable;
Если вы просто выбираете данные из этого запроса для обновления другой таблицы, однако, было бы более эффективно простоOracle выполняет эту работу, создавая один оператор UPDATE, который использовал этот запрос для извлечения нескольких строк.Что-то вроде
UPDATE destination_table dest
SET (col1, col2) = (SELECT col1, col2
FROM source_table_name src
WHERE criteria = l_criteria_variable
AND src.key_column = dest.key_column)
WHERE EXISTS( SELECT 1
FROM source_table_name src
WHERE criteria = l_criteria_variable
AND src.key_column = dest.key_column)