sql >> Database >  >> RDS >> Oracle

Oracle:dynamische SQL

Hier is een eenvoudig voorbeeld dat naar tabellen in uw eigen schema kijkt:

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

Om naar de tabellen van iemand anders te kijken, moet je dba_tables . gebruiken zoals je begon te proberen, of waarschijnlijker all_tables aangezien dat tabellen zou moeten uitsluiten waarvan u niet kunt tellen, maar u moet ook de eigenaar specificeren in de count verklaring.

Normaal gesproken zou je bindvariabelen willen gebruiken om SQL-injectie te voorkomen, maar je moet objectnamen specificeren met op deze manier aaneenschakelingen.

Iets anders om op te letten is een fout die je in je vraag had, maar die Egor nu uit de vraag heeft verwijderd. De dynamische SQL-tekenreeks die u uitvoert, mag niet worden afgesloten met een puntkomma (; ).




  1. Hoe kan ik inloggen en de duurste zoekopdrachten vinden?

  2. java null pointer uitzondering SQL voorbereide instructie

  3. Een onverwacht neveneffect van het toevoegen van een gefilterde index

  4. Gegevens exporteren van MySQL naar Excel met UTF-8-codering