Les Allergies
Alimentaires
Posez votre question Signaler

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

steelspirit 275Messages postés 12 mai 2003Date d'inscription - Dernière réponse le 16 janv. 2012 à 16:16
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 !
Lire la suite 

[SQL] effacer toutes les tables »

18 réponses
Réponse
+1
moins plus
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 !
steelspirit- 25 juin 2003 à 14:57
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 !
Ajouter un commentaire
Réponse
+1
moins plus
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
asevere- 26 juin 2003 à 12:01
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 !
batmat- 26 juin 2003 à 13:04
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
steelspirit- 26 juin 2003 à 13:10
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
Au fait, c'est quel SGBD ?

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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 !
steelspirit- 26 juin 2003 à 12:49
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
Le package standard dbms_sql aussi ?

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Ajouter un commentaire
Réponse
+0
moins plus
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 :)
Ajouter un commentaire
Ce document intitulé « [SQL] effacer toutes les tables » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?