IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Selectionnez des tables


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par défaut Selectionnez des tables
    Bonjour,

    j'aurais aimé savoir s'il était possible de faire un script qui supprimerait toutes les tables contenant une chaine particulière dans leur nom.

    Par exemple supprimer toutes les tables d'une base dont le nom commence par "R_"

    Je travaille en oracle 9r2

    Je vous remercie pour vos réponses

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Oui c'est possible en PL/SQL avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DECLARE
    cmd_text VARCHAR2(100);
    FOR t IN ( SELECT table_name
     
                    FROM user_tables
     
                    WHERE (table_name LIKE 'R_%') )
     
       LOOP
          cmd_text := 'DROP TABLE '  ||  t.table_name;
          dbms_output.put_line(cmd_text) ;
          EXECUTE IMMEDIATE(cmd_text);
       END LOOP;
    Ce script suppose que toutes les tables appartiennent à l'utilisateur connecté (sinon remplacer user_tables by all_tables et se connecter en tanqt que SYSDBA)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par défaut
    Je vous remercie beaucoup.
    Je n'agit qu'au niveau de l'utilisateur connecté donc aucun probleme de ce côté la.

    Je l'ai testé (juste le select) donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT table_name 
     
    FROM user_tables 
     
    WHERE (table_name LIKE 'R_%')
    Et ca m'a renvoyé toutes les tables commencant par R. Le _ est apparamment ignoré. il doit s'agir d'un caractère spécial, quelque chose dans ce gout la.

    Voila j'ai trouvé, il faut échapper l'underscore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT table_name 
     
    FROM user_tables 
     
    WHERE table_name LIKE 'R\_%' ESCAPE '\'
    Merci encore ^^

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Effectivement '_' remplace n'importe quel caractère, il faut utiliser dans votre case la clause ESCAPE:

    SELECT table_name

    FROM user_tables

    WHERE (table_name LIKE 'R\_%' ESCAPE '\');

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Par défaut
    Le script fonctionne sauf dans le cas où des contraintes sont appliquées sur la table à supprimer.

    Il y a bien la solution : DROP TABLE ... CASCADE
    Mais j'ai peur que cela affecte les données des tables en relation(ce que je ne veux pas).

    Je sohaite donc pouvoir
    - supprimer toutes les tables d'une certaine nomenclature
    - supprimer les contraintes liées à ces tables s'il y en a
    - ne pas toucher au données contenues dans les tables qui sont liées par les contraintes

    Y a t-il un moyen?

    Merci d'avance

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Oui, il y a un moyen: On peut supprimer toutes les contraintes d'intégrité sur un table donnée (<parent>) avec le code PL/SQL suivant qui supprime les contraintes pour lesquelles <parent> est la table parent de la contrainte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    BEGIN
     
    FOR v_cc IN (
     
           SELECT table_name, constraint_name
     
           FROM user_constraints
     
           WHERE  r_constraint_name IN  
     
             (SELECT constraint_name FROM user_constraints WHERE  table_name = '<parent>' AND constraint_type ='P'))
     
    LOOP
     
           EXECUTE IMMEDIATE ('ALTER TABLE ' || v_cc.table_name || ' DROP CONSTRAINT ' || v_cc.constraint_name);
     
           dbms_output.put_line('Constraint ' || v_cc.constraint_name ||  ' dropped');
     
    END  LOOP;
     
    END;

    les contraintes sont supprimées et il faut partout d'une sauvegarde ou d'un script pour les recréer si besoin est: je vous conseille de tester soigneusement pour être sûr que cela corresponde bien à ce que vous voulez faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. remplir des tables a partir de fichiers TXT
    Par jeremie dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/03/2004, 14h50
  2. [Volume des tables et performance]
    Par kase74 dans le forum InterBase
    Réponses: 9
    Dernier message: 09/03/2004, 14h14
  3. Afficher noms des tables d'une base
    Par jeff37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/01/2004, 16h00
  4. Liste des tables d'une bases de données spécifique
    Par faridos23 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2003, 22h20
  5. noms des tables d'une base
    Par molto dans le forum SQL
    Réponses: 2
    Dernier message: 17/03/2003, 22h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo