Vous pouvez utiliser la procédure BIND_ARRAY dans le package DBMS_SQL pour effectuer une extraction en bloc. Il y a an example of this dans la documentation DBMS_SQL.
À moins d'un besoin particulier d'utiliser DBMS_SQL, cependant, (et en supposant SQL dynamique est réellement nécessaire en premier lieu), il semble probable que ce serait plus facile à utiliser SQL dynamique natif, à savoir
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 extrayez simplement les données de cette requête afin de mettre à jour une table différente, il serait plus efficace de laisser Oracle faire cela en construisant une seule instruction UPDATE qui a utilisé cette requête pour récupérer 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)
instruction de mise à jour unique? Que veux-tu dire par là. Je suis Noob dans Pl/SQL .. –
@alee - OK. Alors laissez-moi prendre du recul. Pourquoi avez-vous besoin d'utiliser SQL dynamique (et le package DBMS_SQL)? Ne connaissez-vous pas le nom de la table au moment de la compilation, par exemple? –
Je connais la table d'où récupérer les données. Les valeurs de colonnes données seront mises à jour dans une autre table via un ** dblink **. le dernier code que vous avez écrit (déclaration de mise à jour unique), ne serait pas lent? par rapport à la mise à jour en vrac ou quelque chose? –