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

Vue hybride

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    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 ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 669
    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 669
    Billets dans le blog
    10
    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
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    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...

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 101
    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 : 7 101
    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...
    @+

+ 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, 18h13
  2. table existe sous IB/FB
    Par VLDG dans le forum SQL
    Réponses: 1
    Dernier message: 18/01/2005, 15h12
  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, 11h07
  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, 16h59

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