2014-11-17 12 views
9

Ho una cinquantina di tabelle in un database, nel senso che ho bisogno solo di sei tabelle.Oracle - rilascia più tabelle in una singola query

Come posso eliminare le tabelle rimanenti con una singola query?

+3

Se fossi in te, esporterò i sei tavoli, lascerò tutto e ripristinerò i sei tavoli. – Raptor

+0

Non hai nessuno strumento come SQL Developer o Toad? Basta fare clic sulle tabelle (usando shift e ctrl se lo si desidera), quindi fare clic su Rilascia. –

+0

@ThorstenKettner Ho lo sviluppatore sql, ma il problema è che posso selezionare più tabelle ma dopo aver selezionato più tabelle non si dà l'opzione "Drop". – vim

risposta

18

è possibile generare un elenco di DROP TABLE comandi con la query di seguito:

SELECT 'DROP TABLE ' || table_name || ';' FROM user_tables; 

Dopo di che rimuovi i sei tavoli che vuoi mantenere ed eseguire gli altri comandi. Oppure aggiungi una clausola WHERE table_name NOT IN (...) alla query.

Spero che aiuti.

+0

si sta dando errore quando corro.SQL Errore: ORA-00942: tabella o vista non esiste. Ho usato questa query SELECT 'DROP TABLE' || nome_tabella || ';' FROM pmd_dba; qui pmd_dba è il database – vim

+0

No, devi usare 'user_tables'. È una vista di tutti i tavoli in cui sei il proprietario. – DirkNM

+0

Ecco un esempio: http://sqlfiddle.com/#!4/898b1/1 – DirkNM

7

Usa qualcosa di simile, in quanto non v'è alcun comando diretto o modo in Oracle per fare questo

begin 
    for rec in (select table_name 
       from all_tables 
       where table_name like '%ABC_%' 
      ) 
    loop 
    execute immediate 'drop table '||rec.table_name; 
    end loop;    
end; 
/
+1

Aggiungerei anche CASCADE CONSTRAINTS – Multisync

+2

E userei 'user_tables' invece di' all_tables'. Altrimenti è possibile rilasciare una tabella con lo stesso nome in un altro schema (se si dispone di autorizzazioni DROP). – DirkNM

+0

@Deepu in dove clausola possiamo usare "non in" operatore e poi abbiamo messo tutti e sei i nomi laggiù? – vim

1

Prima eseguire questa query con i nomi tabella che si desidera conservare.

SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(table_name) , ';') 
AS statement FROM information_schema.tables 
WHERE table_schema = 'mydatabase' AND table_name not in ('table1', 'table2', 'table3'); 

Questa query fornirà una query della tabella DROP.

0
  1. Selezionare dall'elenco a sinistra tutti i tavoli che si desidera eliminare. Trascina e rilasciali nel tuo foglio di lavoro. Selezionare Nome oggetto dalla finestra a comparsa
  2. Premere il menu Modifica e selezionare Sostituisci.
  3. Digitare nel campo di ricerca il simbolo della virgola ,
  4. Immettere nel campo di sostituzione il testo seguente ;\ndrop table. Nota che c'è uno spazio dopo la tabella delle parole. Sostituisci tutto.
  5. Digita drop table prima del tuo primo tavolo e ; dopo il tuo ultimo.
  6. Sei pronto per abbandonare le tue tabelle.
Problemi correlati