Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:SQL dinamico

Ecco un semplice esempio che esamina le tabelle nel tuo schema:

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;
/

Per guardare le tabelle di qualcun altro dovrai usare dba_tables come hai iniziato a provare, o più probabilmente all_tables poiché ciò dovrebbe escludere le tabelle da cui non puoi contare, ma dovrai anche specificare il proprietario nel count dichiarazione.

Normalmente vorresti usare le variabili bind per evitare l'iniezione SQL, ma devi specificare i nomi degli oggetti con una concatenazione come questa.

Qualcos'altro a cui prestare attenzione è un errore che hai avuto nella tua query, ma che ora Egor ha rimosso dalla domanda. La stringa SQL dinamica che esegui non deve essere terminata da un punto e virgola (; ).