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

Requêtes MySQL Discussion :

TRUNCATE seulement si la table existe [MySQL-8.0]


Sujet :

Requêtes MySQL

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut TRUNCATE seulement si la table existe
    Bonjour,

    j'ai un script qui me permet de vider la bdd avant de pouvoir effectuer un nouveau test :
    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
    SET FOREIGN_KEY_CHECKS = 0;,
    TRUNCATE table `ag_assign_group`;,
    TRUNCATE table `ap_application`;,
    TRUNCATE table `pl_platform`;,
    TRUNCATE table `oz_organization`;,
    TRUNCATE table `lo_location`;,
    TRUNCATE table `li_license`;,
    TRUNCATE table `fu_file_uploaded`;,
    TRUNCATE table `em_mail`;,
    TRUNCATE table `cou_country`;,
    TRUNCATE table `co_company`;,
    TRUNCATE table `ti_ticket`;,
    TRUNCATE table `co_company`;,
    TRUNCATE table `us_user`;,
    TRUNCATE table `usl_user_license`;,
    TRUNCATE table `ust_user_ticket`;,
    SET FOREIGN_KEY_CHECKS = 1;
    Le souci, c'est que si la table n'existe pas, ça génère une erreur. Pas moyen de rajouter IF EXISTS. Comment puis-je faire pour ne pas avoir d'erreur ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Plusieurs possibilités :
    - faire un drop/create des objets (les statistiques seront perdues)
    - encapsuler le truncate dans une procédure

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    encapsuler le truncate dans une procédure
    Mon souci, c'est comment écrire une procédure...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Voici ta procédure stockée :
    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
    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
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`     integer unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `text`   VARCHAR(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP PROCEDURE IF EXISTS vider
    --------------
     
    --------------
    CREATE PROCEDURE `vider` (IN IN_TABLE varchar(255))
    DETERMINISTIC
    BEGIN
      IF EXISTS (SELECT 1 FROM `information_schema`.`tables` WHERE table_schema = 'base' AND table_name = IN_TABLE) THEN
        SET @a = concat('TRUNCATE TABLE `', IN_TABLE, '`;');
        PREPARE stmt FROM @a;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        SELECT 'ok' as 'resultat';
      ELSE
        SELECT 'Pas ok' as 'resultat';
      END IF;
    END
    --------------
     
    --------------
    insert into `test` (`text`) values ('Un'),('Deux'),('Trois')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+-------+
    | id | text  |
    +----+-------+
    |  1 | Un    |
    |  2 | Deux  |
    |  3 | Trois |
    +----+-------+
    --------------
    call `vider`('test')
    --------------
     
    +----------+
    | resultat |
    +----------+
    | ok       |
    +----------+
    --------------
    call `vider`('autre')
    --------------
     
    +----------+
    | resultat |
    +----------+
    | Pas ok   |
    +----------+
    --------------
    select * from `test`
    --------------
     
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. INSERT INTO seulement s'il n'existe pas dans la table.
    Par kOrt3x dans le forum Langage SQL
    Réponses: 13
    Dernier message: 16/09/2014, 17h13
  2. table existe sous IB/FB
    Par VLDG dans le forum SQL
    Réponses: 1
    Dernier message: 18/01/2005, 14h12
  3. [Delphi7 interbase] Rechercher si une table existe
    Par Ricardeau dans le forum Bases de données
    Réponses: 6
    Dernier message: 15/03/2004, 10h07
  4. [VB6] Tester via vb si une table existe
    Par ronald dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 17/04/2003, 15h59

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