DBMS_SQL.Execute y BULK update - Need Help

oracle plsql sqlbulkcopy

Pregunta

Tengo esta consulta

seleccione col1, col2 de la tabla donde critera =: criteria_var

La consulta en particular estaba siendo utilizada en DBMS_SQL para abrir el cursor y vincular las variables. Los valores luego son recuperados por las funciones DBMS_SQL que luego actualizan otra tabla. Pero esto está sucediendo una fila a la vez.

Quiero usar BETK FETCH INTO. He leído los tutoriales, pero no pude encontrar ninguna señal donde pueda utilizar BULK FETCH INTO con DBMS_SQL.

¿Es posible? ¿Si es así, entonces cómo?

Respuesta aceptada

Puede usar el procedimiento BIND_ARRAY en el paquete DBMS_SQL para realizar una recuperación masiva. Hay un ejemplo de esto en la documentación DBMS_SQL.

Sin embargo, a menos que haya una necesidad particular de usar DBMS_SQL, (y suponiendo que el SQL dinámico es realmente necesario en primer lugar) parece probable que sería más fácil usar el SQL dinámico nativo, es decir

EXECUTE IMMEDIATE 'SELECT col1, col2 FROM tableName WHERE criteria = :1'
   BULK COLLECT INTO l_col1_collection, l_col2_collection
  USING l_criteria_variable;

Sin embargo, si solo está obteniendo los datos de esta consulta para actualizar una tabla diferente, sería más eficiente dejar que Oracle haga ese trabajo construyendo una única instrucción UPDATE que usó esta consulta para obtener varias filas. Algo como

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)


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué