Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/07/2007, 12h43   #1
Membre du Club
 
Inscription : octobre 2004
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 340
Points : 53
Points : 53
Par défaut supprimer des tables

salut ;
je voudrais supprimer un ensemble de tables commençant par un une lettre precise exemple:'WH_'
Merci
nah_wah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 12h53   #2
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Avec quel programme travailles-tu ?
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 13h35   #3
Membre du Club
 
Inscription : octobre 2004
Messages : 340
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 340
Points : 53
Points : 53
je developpe avec delphi 7 et firebird 1.5
nah_wah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 18h48   #4
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Tu places un composant Tquery (onglet ) sur ta fiche DataModule.
Puis, tu appelles la procédure suivante :
Code :
1
2
3
4
5
6
7
8
9
Procedure TDataModule.SuppressTable(TableName:String);
Var
SqlStr : String;
Begin
  SqlStr := 'Drop Table "' + TableName + '"';
  Query1.SQL.Clear;
  Query1.SQL.ADD(SqlStr);
  Query1.ExecSQL;
End;
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 15h28   #5
Membre régulier
 
Inscription : février 2005
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 100
Points : 88
Points : 88
Note importante : assure toi de supprimer les contraintes avant comme les clés étrangères sans quoi tu risques d'avoir des surprises.
sillycoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2007, 12h20   #6
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
pour "essorer" une base j'utilise le code ci-dessous avec succès depuis des années.

A toi de l'adapter à tes besoins, mais attention, ne vient pas pleurer que tout à disparut de ta base de données!



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
SET TERM §;
 
 
CREATE PROCEDURE DROP_ALL
AS
  DECLARE TableName      VarChar(32);
  DECLARE ConstraintName VarChar(32);
  DECLARE IndexName      VarChar(31);
  DECLARE IsLoop         Integer;
  DECLARE CountLoop      Integer;
BEGIN
 
  /********************************************************************
  *** Passe à la trappe tous les "foreign key"                      ***
  ********************************************************************/
 
  FOR
    SELECT
      RDB$Relation_Name, RDB$Constraint_Name
    FROM RDB$Relation_Constraints
    WHERE RDB$Constraint_Type = 'FOREIGN KEY'
  INTO :TableName, :ConstraintName DO
  BEGIN
    EXECUTE STATEMENT 'ALTER TABLE ' || TableName || ' DROP CONSTRAINT ' || ConstraintName;
  END
 
 
 
 
  /********************************************************************
  *** Passe à la trappe tous les "CHECK"                            ***
  ********************************************************************/
 
  FOR
    SELECT
      RDB$Relation_Name, RDB$Constraint_Name
    FROM RDB$Relation_Constraints
    WHERE RDB$Constraint_Type = 'CHECK'
  INTO :TableName, :ConstraintName DO
  BEGIN
    EXECUTE STATEMENT 'ALTER TABLE ' || TableName || ' DROP CONSTRAINT ' || ConstraintName;
  END
 
 
 
 
  /********************************************************************
  *** Passe à la trappe tous les "TRIGGERS"                         ***
  ********************************************************************/
 
  FOR
    SELECT
      T.RDB$Trigger_Name
    FROM RDB$Triggers T
    WHERE ( ( T.RDB$SYSTEM_FLAG = 0 ) OR ( T.RDB$SYSTEM_FLAG IS NULL ) )
      AND NOT EXISTS( SELECT * FROM RDB$CHECK_CONSTRAINTS C
                       WHERE C.RDB$TRIGGER_NAME = T.RDB$TRIGGER_NAME
                    )
  INTO :ConstraintName DO
  BEGIN
    EXECUTE STATEMENT 'DROP TRIGGER ' || ConstraintName;
  END
 
 
 
 
  /********************************************************************
  *** Passe à la trappe tous les "VIEW"                             ***
  ********************************************************************/
 
  FOR
    SELECT
      RDB$RELATION_NAME
    FROM RDB$RELATIONS
    WHERE RDB$SYSTEM_FLAG = 0
      AND RDB$VIEW_SOURCE IS NOT NULL
  INTO :ConstraintName DO
  BEGIN
    EXECUTE STATEMENT 'DROP VIEW ' || ConstraintName;
  END
 
 
 
 
  /********************************************************************
  *** Passe à la trappe toutes les "PROCEDURES"                     ***
  ********************************************************************/
 
  /* Le problème est de régler les interdépendances!
     Pour cela, la boucle est appelée sans cesse jusqu'au
     moment ou plus aucune procédure n'est détruite!
  */
 
  IsLoop    = 1;
  CountLoop = 25;
 
  WHILE( ( IsLoop = 1 ) AND ( CountLoop > 0 ) ) DO
  BEGIN
 
    IsLoop = 0;
 
    FOR
      SELECT
        RDB$Procedure_Name
      FROM RDB$PROCEDURES
      WHERE RDB$Procedure_Name != 'DROP_FOR_GEN_DAT'
    INTO :ConstraintName DO
    BEGIN
 
      EXECUTE STATEMENT 'DROP PROCEDURE ' || ConstraintName;
      IsLoop = 1;
 
      WHEN ANY DO
        IsLoop = 1;
 
    END
 
    CountLoop = CountLoop - 1;
 
  END
 
 
 
 
  /*******************************************************************
  *** Passe à la trappe toutes les "TABLES" sauf...                ***
  ********************************************************************/
  FOR
    SELECT
      RDB$Relation_Name
    FROM RDB$RELATIONS
    WHERE ( ( RDB$SYSTEM_FLAG = 0 ) OR ( RDB$SYSTEM_FLAG IS NULL ) )
      AND NOT ( RDB$Relation_Name IN
                (
                  'TABLE1',
                  'TABLE2',
                  'TABLE3'
                )
              )
  INTO :TableName DO
  BEGIN
    EXECUTE STATEMENT 'DROP TABLE ' || TableName;
  END
 
 
END
§
 
EXECUTE PROCEDURE DROP_FOR_ALL§
COMMIT§
 
DROP PROCEDURE DROP_FOR_GEN_ALL§
COMMIT§
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h09.


 
 
 
 
Partenaires

Hébergement Web