rodrigobertin
2/24/2017 - 12:29 PM

Alterar una tabla si no existe

Alterar una tabla si no existe

DROP PROCEDURE IF EXISTS alterTable;
CREATE PROCEDURE alterTable(
  IN _nombreTabla   VARCHAR(256),
  IN _nombreColumna VARCHAR(256),
  IN _tipoColumna   VARCHAR(256),
  IN _default       VARCHAR(256)
)
  BEGIN
    DECLARE _count INT;

    SET _count = (SELECT COUNT(*)
                  FROM INFORMATION_SCHEMA.COLUMNS
                  WHERE TABLE_NAME = _nombreTabla AND
                        COLUMN_NAME = replace(_nombreColumna,' ','_'));
    -- Si no existe
    IF _count = 0
    THEN
      IF _default != ''
      THEN
        -- Para enteros
        IF _tipoColumna
           LIKE concat('%INT%')
           OR _tipoColumna = 'int'
           OR _tipoColumna = 'INT'
           OR _tipoColumna = 'integer'
           OR _tipoColumna = 'INTEGER'
           OR _tipoColumna = 'float'
           OR _tipoColumna = 'FLOAT'
        THEN
          SET @def = concat(' DEFAULT ',replace(_default,'\'',''));
        END IF;

        -- Para varchar
        IF _tipoColumna
           LIKE concat('%varchar%')
        THEN
          SET @def = concat(' DEFAULT\'',_default,'\'');
        END IF;

        -- Para text no puede tener Default
        IF _tipoColumna = 'TEXT' OR _tipoColumna = 'text'
        THEN
          SET @def = '';
        END IF;

        -- Si tiene default
        SET @sqlExec = concat('ALTER TABLE ',replace(_nombreTabla,' ','_'),' ADD COLUMN ',replace(_nombreColumna,' ','_'),' ',upper(_tipoColumna),@def);

      ELSE
        -- Si no tiene default
        SET @sqlExec = concat('ALTER TABLE ',replace(_nombreTabla,' ','_'),' ADD COLUMN ',replace(_nombreColumna,' ','_'),' ',upper(_tipoColumna));
      END IF;

      SELECT 'Creada' as resultado;

      PREPARE stmt FROM @sqlExec;
      EXECUTE stmt;
    END IF;

    -- Si existe aviso
    IF _count>=1 THEN
      SELECT 'Ya existe la columna' as resultado;
    END IF;
  END;


CALL alterTable('test','prueasasba_table','text',NULL);