Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :SQL dynamique

Voici un exemple simple qui examine les tables de votre propre schéma :

set serveroutput on
declare
    c number;
begin
    for r in (select table_name from user_tables) loop
        execute immediate 'select count(*) from ' || r.table_name
            into c;
        dbms_output.put_line(r.table_name ||': '|| c);
    end loop;
end;
/

Pour consulter les tables de quelqu'un d'autre, vous devrez utiliser dba_tables que vous avez commencé à essayer, ou plus probablement all_tables car cela devrait exclure les tables dont vous ne pouvez pas compter, mais vous devrez également spécifier le propriétaire dans le count déclaration.

Normalement, vous voudriez utiliser des variables de liaison pour éviter l'injection SQL, mais vous devez spécifier les noms d'objet avec une concaténation comme celle-ci.

Une autre chose à surveiller est une erreur que vous avez commise dans votre requête, mais qu'Egor a maintenant supprimée de la question. La chaîne SQL dynamique que vous exécutez ne doit pas se terminer par un point-virgule (; ).