Puis-je utiliser "exécuter immédiat" avec pour cycle? J'ai besoin de générer une combinaison de valeurs en pl/sql. À propos de cela, je pense à appeler une série de dynamiques imbriquées pour le cycle.Exécuter une boucle immédiate PL/SQL
Exemple: colonne 1 ont ces valeurs: A, B colonne 2 ont cette valeur: C, D, E
Je souhaite générer cette combinaison: AC/AD/AE/BC/BD/BE
Je pense obtenir cela comme:
for i in 1..count.column1
for j in 1..count.column2
dbms_output.put_line(column1.value(i)||'-'||column1.value(j));
end loop;
end loop;
en raison de je ne sais pas le nombre de colonne (variable), puis-je utiliser un execute immédiat?
declare
sql_stmt varchar2(200);
begin
sql_stmt := 'for i in 1..count.column1 for j in 1..count.column2 dbms_output.put_line(column1.value(i)||'-'||column1.value(j)); end loop; end loop';
execute immediate sql_stmt;
end;
Mais j'ai l'erreur ORA-06512. Comment puis-je faire cela? :)
Merci d'avance pour votre suggestion!
Pas facilement. Les processus 'execute immediate' complètent les instructions SQL et les blocs PL/SQL, et ceux-ci ne partagent pas la portée variable avec la procédure appelante. Vous devez générer tout le bloc 'declare ... begin ... end;', passer vos variables de liaison et transmettre le résultat sous la forme d'un tableau ou d'un curseur ref. De plus, la génération de requêtes en batch a tendance à détruire le cache du curseur d'Oracle. –