sql >> Databasteknik >  >> RDS >> Oracle

Oracle:Dynamisk SQL

Här är ett enkelt exempel som tittar på tabeller i ditt eget 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;
/

För att titta på någon annans tabeller måste du använda dba_tables som du började försöka, eller mer troligt all_tables eftersom det borde utesluta tabeller som du inte kan räkna från, men du måste också ange ägaren i count uttalande.

Normalt skulle du vilja använda bindningsvariabler för att undvika SQL-injektion, men du måste ange objektnamn med sammanlänkning så här.

Något annat att hålla utkik efter är ett misstag du hade i din fråga, men som Egor nu har tagit bort från frågan. Den dynamiska SQL-strängen du kör ska inte avslutas med semikolon (; ).




  1. Starta om mysql i php-webbläsaren, behörighetsproblem?

  2. Få den vänstra delen av en sträng i SQL Server (T-SQL)

  3. Hur man synkroniserar en java-metod som anropas av PL/SQL

  4. Är det en dålig praxis att använda EXIT WHEN-instruktionen när man går igenom CURSORs i Oracle?