rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[SQL] effacer toutes les tables

Posté par steelspirit, le mercredi 25 juin 2003 à 14:44:55
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 !
Répondre à steelspirit  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le mercredi 25 juin 2003 à 14:51:59
Salut steelspirit
A la place de n DORP 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 !
Répondre à asevere

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
steelspirit, le mercredi 25 juin 2003 à 14:57:49
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 !
Répondre à steelspirit

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
batmat, le mercredi 25 juin 2003 à 16:22:14
>A la place de n DORP TABLE.... tu peux faire un DROP DATABASE

Ah oui ! c sur vaut mieux remplacer le DORP ;-p

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Répondre à batmat

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le mercredi 25 juin 2003 à 19:54:31
arf c'est malin ca... :-p

Ca va batman ?

Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi !
Répondre à asevere

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
batmat, le mercredi 25 juin 2003 à 23:59:22
Ben ça va, mais là jvais me coucher ;p
@++
Ps : retour de la bonne vieille signature, mais en gras maintenant :)

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Répondre à batmat

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
steelspirit, le jeudi 26 juin 2003 à 10:52:23
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 !
Répondre à steelspirit

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le jeudi 26 juin 2003 à 11:33:57
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 !
Répondre à asevere

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
batmat, le jeudi 26 juin 2003 à 11:36:07
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
Répondre à batmat

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
batmat, le jeudi 26 juin 2003 à 11:40:47
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
Répondre à batmat

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le jeudi 26 juin 2003 à 12:01:14
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 !
Répondre à asevere

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
batmat, le jeudi 26 juin 2003 à 13:04:27
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
Répondre à batmat

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
steelspirit, le jeudi 26 juin 2003 à 13:10:47
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 !
Répondre à steelspirit

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
batmat, le jeudi 26 juin 2003 à 11:41:42
Au fait, c'est quel SGBD ?

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Répondre à batmat

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
steelspirit, le jeudi 26 juin 2003 à 11:51:30
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 !
Répondre à steelspirit

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le jeudi 26 juin 2003 à 12:03:54
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 !
Répondre à asevere

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
steelspirit, le jeudi 26 juin 2003 à 12:49:42
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 !
Répondre à steelspirit

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
batmat, le jeudi 26 juin 2003 à 13:19:14
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
Répondre à batmat

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
steelspirit, le jeudi 26 juin 2003 à 13:23:53
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 !
Répondre à steelspirit

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
steelspirit, le jeudi 26 juin 2003 à 13:26:29
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 !
Répondre à steelspirit

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 batmat, le jeudi 26 juin 2003 à 13:26:30
Le package standard dbms_sql aussi ?

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
Répondre à batmat