web-dev-qa-db-fra.com

Oracle - supprimer plusieurs tables dans une seule requête

J'ai 50 tables dans une base de données, en ce sens que je n'ai besoin que de six tables.

Comment puis-je supprimer les tables restantes par une seule requête?

10
vim

Vous pouvez générer une liste de commandes DROP TABLE avec la requête ci-dessous:

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

Ensuite, supprimez les six tables que vous souhaitez conserver et exécutez les autres commandes. Ou vous ajoutez une clause WHERE table_name NOT IN (...) à la requête.

J'espère que ça aide.

20
DirkNM

Utilisez quelque chose comme ceci, car il n'y a pas de commande directe ni de moyen dans Oracle

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

Pour développer la réponse, Pour les versions Oracle 10 et ultérieures, les tables supprimées ne sont pas supprimées définitivement, mais déplacées vers le chutier recyclé. Pour supprimer réellement les tables, vous devez ajouter le paramètre facultatif PURGE.

En développant la réponse acceptée: 

SELECT 'DROP TABLE ' || table_name || ' PURGE ;' DB_DEATH FROM user_tables;
2
Peter

Commencez par exécuter cette requête avec les noms de table que vous souhaitez conserver.

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');

Cette requête vous donnera une requête dans la table DROP.

1
Ankur R
DECLARE 
  TYPE bulk_array is table of ALL_TABLES.TABLE_NAME%type; 
  array bulk_array;
BEGIN

 SELECT OWNER ||'.'|| TABLE_NAME BULK COLLECT 
   INTO array
   FROM ALL_TABLES 
  WHERE TABLE_NAME LIKE '%%';--HERE U WILL PUT YOUR CONDITIONS.


    FOR i IN array.FIRST..array.LAST LOOP
       EXECUTE IMMEDIATE 'DROP TABLE '|| array(i) || ' PURGE'; --Specify PURGE if you want to drop the table and release the space associated
    END LOOP; 
END;
0
Cristian Botelho
  1. Sélectionnez dans la liste de gauche toutes les tables que vous souhaitez supprimer. Glissez-les et déposez-les dans votre feuille de calcul. Sélectionnez le nom de l'objet dans la fenêtre contextuelle.
  2. Appuyez sur le menu Édition et sélectionnez Remplacer.
  3. Tapez dans le champ de recherche le symbole de virgule ,
  4. Tapez dans le champ de remplacement le texte suivant ;\ndrop table . Notez qu'il y a un espace après le tableau Word. Remplace tout.
  5. Tapez drop table avant votre première table et ; après votre dernière.
  6. Vous êtes prêt à laisser tomber vos tables.
0
user6585581