DBMS_SQL.Execute et mise à jour BULK - Besoin d'aide

oracle plsql sqlbulkcopy

Question

J'ai cette question

sélectionnez col1, col2 dans la table où critera =: criter_var

La requête particulière était utilisée dans DBMS_SQL pour ouvrir le curseur et lier les variables. Les valeurs sont ensuite extraites par les fonctions DBMS_SQL qui mettent ensuite à jour une autre table. mais cela se produit une rangée à la fois.

Je veux utiliser BULK FETCH INTO. J'ai lu les tutoriels, mais je n'ai trouvé aucun endroit où utiliser BULK FETCH INTO avec DBMS_SQL.

c'est possible? Si oui, alors comment?

Réponse acceptée

Vous pouvez utiliser la procédure BIND_ARRAY dans le package DBMS_SQL pour effectuer une extraction en bloc. Vous en trouverez un exemple dans la documentation DBMS_SQL.

Toutefois, sauf nécessité particulière d'utiliser DBMS_SQL (et en supposant que le SQL dynamique soit nécessaire en premier lieu), il semble probable qu'il serait plus facile d'utiliser du SQL dynamique natif, c'est-à-dire

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

Si vous ne faites qu'extraire les données de cette requête afin de mettre à jour une table différente, il serait plus efficace de laisser Oracle effectuer ce travail en construisant une seule instruction UPDATE utilisant cette requête pour extraire plusieurs lignes. Quelque chose comme

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)


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi