Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Dynamisches SQL

Hier ist ein einfaches Beispiel, das Tabellen in Ihrem eigenen Schema betrachtet:

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

Um sich die Tabellen von jemand anderem anzusehen, müssen Sie dba_tables verwenden wie Sie es versucht haben, oder eher all_tables da dies Tabellen ausschließen sollte, von denen Sie nicht zählen können, aber Sie müssen auch den Eigentümer in count angeben Aussage.

Normalerweise würden Sie Bind-Variablen verwenden wollen, um eine SQL-Einschleusung zu vermeiden, aber Sie müssen Objektnamen mit einer solchen Verkettung angeben.

Etwas anderes, auf das Sie achten sollten, ist ein Fehler, den Sie in Ihrer Abfrage hatten, den Egor jedoch jetzt aus der Frage entfernt hat. Die dynamische SQL-Zeichenfolge, die Sie ausführen, sollte nicht durch ein Semikolon abgeschlossen werden (; ).