sql >> Database >  >> RDS >> Oracle

Uitvoeren voor elke tabel 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;
/

Als u kiest uit all_tables je kunt er niet op rekenen dat je de benodigde beurzen hebt gekregen om uit de tafelnaam te kiezen. Controleer daarom op de ORA-00942: table or view does not exist fout gegooid.

Wat betreft de oorzaak van uw fout:u krijgt deze fout omdat de select-instructie een resultatenset retourneert met meer dan één rij (één voor elke tabel) en u kunt zo'n resultatenset niet toewijzen aan een varchar2.

Zorg er trouwens voor dat je dbms_output inschakelt met SET SERVEROUT ON voordat u dit blok uitvoert.




  1. Is er een manier om alle elementen van de JSON-array aan te pakken bij het maken van een beperking in PostgreSQL?

  2. Eerste aanmelding:HTTP-status 500 - Verwerking van verzoek is mislukt; geneste uitzondering is org.springframework.transaction.CannotCreateTransactionException

  3. Haal de tekenreeks op van de query die een trigger heeft geactiveerd

  4. PDO::fetchAll vs. PDO::fetch in a loop