samedi 7 mars 2015

SQL : IF EXISTS INDEX

Le fameux "IF EXISTS" bien pratique pour les scripts SQL, nous rend bien des services, mais malheureusement il existe pas pour le test sur les index des tables.
Comment faire, pour pouvoir tester si un index existe, pour le créer ou le détruire ?

La solution :
  • Création d'une procédure stockée
 la procédure stockée vous permet d’explorer le schéma de votre table, d’ailleurs comme on le sait le SELECT * , est bien sur plus groumant qu'un SELECT toto, tata .... (c'est pas le sujet )

Voici la procédure qui vous permet de faire le fameux : IF EXISTS , pour vos INDEX de tables :

DELIMITER $$

DROP PROCEDURE IF EXISTS `createIndex` $$
CREATE PROCEDURE `createIndex`
(
    mydatabase     VARCHAR(60),
    mytable         VARCHAR(60),
    myindex            VARCHAR(60),
    mycolumns        VARCHAR(60)
)
BEGIN
    DECLARE IndexExist INTEGER;
   
    SELECT COUNT(1) INTO IndexExist
    FROM INFORMATION_SCHEMA.STATISTICS
    WHERE table_schema = mydatabase
    AND   table_name   = mytable
    AND   index_name   = myindex;
   
    IF IndexExist = 0 THEN
        SET @sqlstmt = CONCAT('CREATE INDEX ',myindex,' ON ',
        mydatabase,'.',mytable,' (',mycolumns,')');
        PREPARE st FROM @sqlstmt;
        EXECUTE st;
        DEALLOCATE PREPARE st;
     END IF;

END $$

DELIMITER ;


Maintenant il suffit de l'appeler, via un CALL et vous aurez plus d'erreur sur la création de vos INDEX dans vos scripts de déploiement.

Aucun commentaire:

Enregistrer un commentaire