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

Ausführen für jede Tabelle in PLSQL

declare 
  cnt number;
begin
  for r in (select owner, table_name from all_tables
             where upper(table_name) like ('%MSRS%')) loop

    execute immediate 'select count(*) from "'
            || r.owner || '"."'
            || r.table_name || '"'
            into cnt;

    dbms_output.put_line(r.owner || '.' || r.table_name || ': ' || cnt);
  end loop;
end;
/

Wenn Sie aus all_tables auswählen Sie können sich nicht darauf verlassen, dass Sie die erforderlichen Genehmigungen erhalten haben, um aus dem Tabellennamen auszuwählen. Sie sollten daher nach ORA-00942: table or view does not exist suchen Fehler ausgelöst.

Zur Ursache Ihres Fehlers:Sie erhalten diesen Fehler, weil die Select-Anweisung eine Ergebnismenge mit mehr als einer Zeile zurückgibt (eine für jede Tabelle) und Sie eine solche Ergebnismenge nicht einem varchar2 zuweisen können.

Stellen Sie übrigens sicher, dass Sie dbms_output mit SET SERVEROUT ON aktivieren bevor dieser Block ausgeführt wird.