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

Hvordan dropper man liste over tabel fra et skema i Oracle?

Brug dynamisk SQL, der fjerner dataordbogen.

begin
     for trec in ( select table_name
                   from user_tables
                   where table_name like 'PREFIX\_%' escape `\' )
     loop
         dbms_output.put_line('dropping table ' || trec.table_name);
         execute immediate 'drop table '||trec.table_name;
     end loop;
end;

Det er en god idé at være præcis med LIKE-klausulen; ved hjælp af escape søgeord for at sikre, at understregninger ikke behandles som jokertegn. Brug alternativt substr(table_name, 1, 7) = 'PREFIX_' .

At slippe den forkerte tabel er ikke en katastrofe, forudsat at du arbejder på 10g eller nyere og genbrugsbakken er aktiveret , men det er stadig bedre at lade være. Selvfølgelig ville du ikke køre kode som denne i produktion, men du ville bruge princippet til at generere et script med drop-sætninger.

Ovenstående kode håndterer ikke afhængigheder. Hvis du har fremmednøgler, der refererer til de præfikserede tabeller, og du ønsker at tvinge tab af tabellerne, skal du bruge denne yderligere logik:

     execute immediate 'drop table '|| trec.table_name ||' cascade constraint';

Dette fjerner begrænsningerne for fremmednøgle, men forlader de (tidligere) afhængige tabeller.



  1. Hvad er forskellen mellem Postgres DISTINCT vs DISTINCT ON?

  2. Gentagelse af den samme bindevariabel flere gange ved brug af OPEN...FOR dynamisk SQL-struktur i Oracle PL/SQL

  3. Sådan genereres grafer og diagrammer fra mysql-database i php

  4. Opdatering af kolonne baseret på eksisterende felter