sql >> Database >  >> RDS >> Oracle

Hoe een lijst met tabellen uit een schema in Oracle te laten vallen?

Gebruik dynamische SQL die de datadictionary verdrijft.

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;

Het is een goed idee om precies te zijn met de LIKE-clausule; met behulp van de escape zoekwoord om ervoor te zorgen dat underscores niet als jokertekens worden behandeld. Of gebruik substr(table_name, 1, 7) = 'PREFIX_' .

Het laten vallen van de verkeerde tabel is geen ramp, op voorwaarde dat je met 10g of hoger werkt en de RECYCLE BIN is ingeschakeld , maar het is nog steeds beter om het niet te doen. Uiteraard zou je dergelijke code niet uitvoeren in Production, maar je zou het principe gebruiken om een ​​script met drop-statements te genereren.

De bovenstaande code behandelt geen afhankelijkheden. Als u externe sleutels heeft die verwijzen naar de vooraf ingestelde tabellen en u wilt het laten vallen van de tabellen forceren, gebruik dan deze extra logica:

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

Dit laat de beperkingen van de refererende sleutel vallen, maar laat de (voorheen) afhankelijke tabellen achter.



  1. Het cachen van query's in MySQL voorkomen

  2. SQL Server Log Verzending &Disaster Recovery Installatie en configuratie -4

  3. Kan ik in een Oracle-trigger nieuw en oud toewijzen aan een rowtype-variabele?

  4. Oracle naar MySQL tijdstempel conversie in MySQL insert statement