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

SQL Procédural MySQL Discussion :

MySQL - Récupérer le résultat d'un CHECK TABLE dans une procédure stockée


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut MySQL - Récupérer le résultat d'un CHECK TABLE dans une procédure stockée
    Bonjour,

    J'ai une table qui est sujette à des crash répétés. En attendant de voir d'où ça vient, je voudrais mettre en place dans une procédure SQL, une vérification de l'état de ma table et dans le cas où ce n'est pas 'OK', la supprimer puis la recréer.

    Là où ça coince, c'est que je n'arrive pas à trouver comment on récupère la valeur d'un CHECK TABLE pour faire un test sur la valeur de Msg_text.

    Est-ce possible, et sinon comment pourrais-je faire?

    Merci!

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    hélas je ne pense pas du tout que se soit possible...
    ce n'est ni un changement d'état sql ni un résultat récupérable par un select...

    par contre, une fois le check lancé ça met à jour la table information_schema.tables...
    tu dois sélectionner le nom de la db dans la colonne TABLE_SCHEMA
    le nom de la table sera dans la colonne TABLE_NAME
    la date de check est dans la colonne Check_time
    si le check est bon la colonne checksum contiendra null

    la liste des tables qui ont eu un check mauvais:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'test' AND ENGINE='MyISAM' 
          AND CHECKSUM IS NOT NULL;
    ça tu peux le mettre un curseur et faire un boucle qui utilise une requête préparée utilisant une commande construite dynamiquement qui fait la réparation sur les noms de tables trouvés...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    tu peux le mettre un curseur et faire un boucle qui utilise une requête préparée utilisant une commande construite dynamiquement qui fait la réparation sur les noms de tables trouvés.
    Ouch, ça devient compliqué pour moi là ^^

    C'est une table qui n'est destinée qu'à servir de modèle pour duplication, je vais juste essayer de faire un insert dessus, et au cas où ça ne passe pas, je considère que je peux la réparer/recréer.

    Merci!

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    un truc dans le genre:
    Code sql : 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
    delimiter $$
    create procedure reparation()
    begin
      declare b bool default 1;
      declare t varchar(64);
      declare c cursor for
        SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'test' AND ENGINE='MyISAM' 
        AND CHECKSUM IS NOT NULL;
      declare continue handler for not found set b=0;
      open c;
      while b do
        fetch c into t;
        if b then
          set @e=concat('repair table ',t);
          prepare exe from @e;
          execute exe;
          deallocate prepare exe;
        end if;
      end while;
    end$$

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. LOCK Table dans une procédure stockée
    Par nonilastar dans le forum Firebird
    Réponses: 4
    Dernier message: 15/05/2009, 11h27
  3. [MsSQL2K5] passage d'un nom de table dans une procédure stockée
    Par narutobaka dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 14/11/2008, 13h24
  4. Réponses: 2
    Dernier message: 03/03/2006, 13h41
  5. Problème d'alter table dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2005, 09h19

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