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

Oracle:Dynamisk SQL

Her er et simpelt eksempel, der ser på tabeller i dit eget skema:

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

For at se på en andens tabeller skal du bruge dba_tables som du begyndte at prøve, eller mere sandsynligt all_tables da det burde udelukke tabeller, du ikke kan tælle fra, men du skal også angive ejeren i count erklæring.

Normalt vil du gerne bruge bindevariabler for at undgå SQL-injektion, men du skal angive objektnavne med sammenkædning som denne.

Noget andet at se efter er en fejl, du havde i din forespørgsel, men som Egor nu har fjernet fra spørgsmålet. Den dynamiske SQL-streng, du udfører, bør ikke afsluttes med et semikolon (; ).




  1. Forespørgsel om at kontrollere overlappende områder i sql-server?

  2. MySql:Tæl antallet af gange, ordene forekommer i en kolonne

  3. Vælg information fra sidste vare og tilmeld dig det samlede beløb

  4. Subsonisk understøttelse af Oracle ODP.NET?