sql >> Databasteknik >  >> RDS >> Oracle

Hur släpper man lista över tabeller från ett schema i Oracle?

Använd dynamisk SQL som driver bort dataordboken.

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 är en bra idé att vara exakt med LIKE-satsen; med escape nyckelord för att säkerställa att understreck inte behandlas som jokertecken. Använd alternativt substr(table_name, 1, 7) = 'PREFIX_' .

Att släppa fel tabell är inte en katastrof förutsatt att du arbetar med 10g eller senare och återvinningsfacket är aktiverat , men det är ändå bättre att låta bli. Uppenbarligen skulle du inte köra sådan kod i produktion, men du skulle använda principen för att generera ett skript med drop-satser.

Ovanstående kod hanterar inte beroenden. Om du har främmande nycklar som refererar till de prefixerade tabellerna och du vill tvinga bort tabellerna, använd denna ytterligare logik:

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

Detta tar bort begränsningarna för främmande nyckel men lämnar de (tidigare) beroende tabellerna.



  1. Beräkna procent från SUM() i samma SELECT sql-fråga

  2. Varchar-data visar resultat selektivt

  3. Prestanda i PDO / PHP / MySQL:transaktion kontra direkt exekvering

  4. Flera vänster Gå med summa