2010-11-15 2 views
1
PROCEDURE A(
... 
BEGIN 
stmt := 'select * from '||src; 
execute immediate stmt; 
dbms_output.put_line(??); 
END A; 
+0

@OMG: Les résultats de l'appel de cette procédure PL/SQL sont déjà redirigés vers un fichier. – Moeb

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; 
Questions connexes