PROCEDURE A(
...
BEGIN
stmt := 'select * from '||src;
execute immediate stmt;
dbms_output.put_line(??);
END A;
1
A
Répondre
0
Si vous connaissez la structure de la table nommée dans « src » lors de l'écriture du code, vous pouvez le faire:
PROCEDURE A IS
...
l_cur sys_refcursor;
BEGIN
stmt := 'select * from '||src;
open l_cur for stmt;
loop
fetch l_cur into ??; -- record or list of variables that matches columns of "src"
exit when l_cur%notfound;
dbms_output.put_line(??);
end loop;
close l_cur;
END A;
Si vous ne saurez pas la structure jusqu'à ce que le temps d'exécution, vous devrez utiliser le package DBMS_SQL, ce qui est très puissant, mais pas simple.
0
Je ne suis pas sûr wether cela fonctionne avec votre approche « exécuter stmt immédiate », mais avec Sql statique, suivant travaille pour moi:
for my_result in
(
select * from my_table tbl
where ...
order by tbl.my_id_col
) loop
dbms_output.put_line(my_result.field1 || ', ' || my_result.field2 || ...);
end loop;
@OMG: Les résultats de l'appel de cette procédure PL/SQL sont déjà redirigés vers un fichier. – Moeb