[SQL] effacer toutes les tables [Résolu/Fermé]

Signaler
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
-
Messages postés
7
Date d'inscription
dimanche 15 janvier 2012
Statut
Membre
Dernière intervention
26 janvier 2012
-
Bonjour à tous !
Je ne sais pas si c'est possible mais je souhaiterai, en sql, vider le contenue d'une base car faire des drop table nom_table c'est bien mais quand on a beaucoup de table c'est pas le top !

Merci d'avance pour votre aide

- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah ! Ah ! Ah !

12 réponses

Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
Il existe une table contenant le nom de toutes tes tables :

select table_name from user_tables;

Je ne peux pas tester ici (je veux pas risquer d'effacer toutes les tables sur lesquelles je bosser ;)), mais renseigne toi sur le SQL dynamique.

En effet :
CURSOR c_mestables IS

select table_name
from user_tables;

et ensuite faire
for cur_table in c_mestables

LOOP
truncate table cur_table; -- attention au truncate : pas de rollback possible...
END LOOP;


Ca parait alléchant comme ça, mais ça ne marchera pas ;) Il te dira qu'il ne connait pas la table cur_table :). Je crois qu'il y a donc ptete une solution avec le package dbms_sql

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
Merde, là t'as répondu plus vite :)
@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Messages postés
13073
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
22 août 2020
416 >
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008

He voui !

Mais dit moi... en appliquant ta methode... un ne rique pas de suprimer toutes els tables de TOUTES les bdd ?
:o)

ha bah ca m'a remis en forme :-DDDD

Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi !
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112 >
Messages postés
13073
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
22 août 2020

Petit pb : je doute que la méthode que j'ai donnée fonctionne ailleurs que sous un SGBD qui supporte le PL/SQL ... (Oracle à l'origine)... Mais sous Oracle, non : user_tables est, je crois, une vue où il n'y a que tes tables.

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
78 >
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008

j'utilise postgreSQL et il supporte bien le PL/SQL

exemple

DECLARE
curs1 refcursor;
curs2 CURSOR FOR SELECT * FROM tenk1;
curs3 CURSOR (key integer) IS SELECT * FROM tenk1 WHERE unique1 = key;

- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah ! Ah ! Ah !
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
Au fait, c'est quel SGBD ?

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
13073
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
22 août 2020
416
Salut steelspirit
A la place de n DROP TABLE.... tu peux faire un DROP DATABASE....
C"est assez efficace :) sauvegarde bien la structure de ta db avant de faire ca :)

@++

Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi !
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
78
merci ! je vais essayer ça ... mais je vais quand meme faire un petit dump avant :P

@+ asevere et vive la bretagne !


- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah ! Ah ! Ah !
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
78
re bonjour !

J'ai encore une autre question : maintenant je voudrai, toujours en sql, effacer le contenu de toutes les tables et donc garder une base avec des tables vides. Bien entendu on peu faire des delete from nom_table mais c lourd quand y a plein de table !


- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah ! Ah ! Ah !
Messages postés
13073
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
22 août 2020
416
Là par-contre il n'y a pas de solution (non détournées) que de faire un
"DELETE FROM 'table' "

Sinon un astuce consiste a en registrer la structure de la base avec les ennoncés DROP TABLE (selon ton sgbd ca se fait tout seul :))

exemple:
Sous mysql
"mysqldump --add-drop-table "
DROP TABLE IF EXISTS table1;

CREATE TABLE afaitprojet (
idEtud int(11) NOT NULL default '0',
idProjet int(11) NOT NULL default '0',
PRIMARY KEY (idEtud,idProjet)
) TYPE=MyISAM;
... pour toute les tables

tu enregistre ca dans un fichier et tu executes cette requette quand tu veux vider la base tu executes la requete du-dit fichier...

Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi !
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
78
merci pour votre aide les gars !
c'est vrai j'ai oublié de préciser : c'est postgreSQL ! L'idée de créer un cursor me parait bien.

Sinon y a toujours moyen de bidouiller :
-> on dump la structure de la base : pg_dump -s nom_base > structure.sql
-> on efface la base : drop database nom_base
-> on restore la base : pgsql nom_base < structure.sql

mais bon c pas tres propre !
je v essayer avec vos méthodes.
A+

- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah ! Ah ! Ah !
Messages postés
13073
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
22 août 2020
416
En fait je ne sais pas pourquoi je'ai donné une explication si compliquer pour un probleme si simple :-/

dans un fichier (purge.sql par exemple)

DELETE FROM "table1";
DELETE FROM "table2";
DELETE FROM "table3";
...

et tu n'as plus qu'a lancer ca quand tu en as besoin ;-p

Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi !
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
78
je suis d'accord avec toi mais des tables j'en ai une bonne centaine ! donc écrire un tel fichier à la main c long !

- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah ! Ah ! Ah !
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
Je pense que la méthode donnée par asevere est celle qui a le plus de chances de fonctionner sous postgre (à moins que quelqu'un me dise que le PL/SQL a été porté sous postgre)...

Il faut que tu trouves l'équivalent de la table user_tables. Je pense qu'une table de ce type (contenant le nom de toutes les tables de la BDD) existe sous postgre.

Tu fais un :
select lenomdetable from cettetableenquestion;
que tu envoies dans un fichier.

Ensuite:
awk '{ print "drop table " $1 }' lenomdetestables.sql > del_tables.sql

Et tu executes le del_tables.sql ...

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
78
si postgre supporte le pl/sql !

DECLARE
curs1 refcursor;
curs2 CURSOR FOR SELECT * FROM tenk1;
curs3 CURSOR (key integer) IS SELECT * FROM tenk1 WHERE unique1 = key;



- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah ! Ah ! Ah !
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
78
Here is an Oracle PL/SQL function:

CREATE OR REPLACE FUNCTION cs_fmt_browser_version(v_name IN varchar, v_version IN varchar)
RETURN varchar IS
BEGIN
IF v_version IS NULL THEN
RETURN v_name;
END IF;
RETURN v_name || '/' || v_version;
END;
/
show errors;

This is how this function would look when ported to PostgreSQL:

CREATE OR REPLACE FUNCTION cs_fmt_browser_version(varchar, varchar)
RETURNS varchar AS '
DECLARE
v_name ALIAS FOR $1;
v_version ALIAS FOR $2;
BEGIN
IF v_version IS NULL THEN
return v_name;
END IF;
RETURN v_name || ''/'' || v_version;
END;
' LANGUAGE plpgsql;


- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah ! Ah ! Ah !
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
Le package standard dbms_sql aussi ?

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Messages postés
7
Date d'inscription
dimanche 15 janvier 2012
Statut
Membre
Dernière intervention
26 janvier 2012

Je crois que cette fois c'est la bonne, il y a tout plein de geek qui ont répondu à cette question. Pourquoi personne ne répond jamais quand moi je pose une question U_U.

Le premier qui répond aura un bisou sur la joue :D

je dispose de trois tables et l'une d'elles a trois tables héritières, j'utilise quelle instruction?

celle ci :

CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);


ou celle la :

CREATE TYPE nom_super_type AS OBJECT
(att1 type1, ... attn typen)
NOT FINAL ;


Je suis pas une allumeuse, juste une paumée qui sait plus quoi faire pour trouver une réponse.

Merci d'avance les gens :)