Cambiar Tipo de las columnas en una base de datos


Nos podemos encontrar que un campo diseñado para un valor excede al final del valor que finalmente debe llevar. O que incluso hemos puesto un tipo de datos diferente o mas pequeño y debemos realizar el cambio.

Si esto es solo en una o dos tablas, no es demasiado problema hacerlo manual.

Si por el contrario, necesitas cambiarlo en varias tablas, este script te puede servir.

Devuelve un resultado, una query con todos los ALTER TABLE necesarios para cambiar un tipo a otro en una base de datos.
CREATE PROCEDURE `changeType`
BEGIN
DECLARE v_done INT DEFAULT 0;
DECLARE v_table VARCHAR(50);
DECLARE v_database VARCHAR(20) DEFAULT '*******';
DECLARE v_column VARCHAR(50);
DECLARE v_length INTEGER(11);
DECLARE v_oldtype VARCHAR(20) DEFAULT 'smallint';
DECLARE v_newtype VARCHAR(20) DEFAULT 'int';
DECLARE v_text TEXT;
DECLARE cursor1 CURSOR FOR SELECT t.TABLE_NAME, t.COLUMN_NAME, substr(t.COLUMN_TYPE,instr(t.COLUMN_TYPE,"(") + 1, instr(t.COLUMN_TYPE,")") - instr(t.COLUMN_TYPE,"(") - 1) longitud
FROM INFORMATION_SCHEMA.COLUMNS t
WHERE t.TABLE_SCHEMA = v_database and t.DATA_TYPE = v_oldtype AND substr(t.COLUMN_TYPE,instr(t.COLUMN_TYPE,"(") + 1, instr(t.COLUMN_TYPE,")") - instr(t.COLUMN_TYPE,"(") - 1) > 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1;
OPEN cursor1;
SET v_text = “”;
myloop: LOOP
FETCH cursor1 INTO v_table, v_column, v_length;
IF v_done = 1 THEN
leave myloop;
END IF;
SET v_text = CONCAT( v_text, ‘ALTER TABLE ‘, v_table, ‘ MODIFY COLUMN ‘, v_column, ‘ ‘ ,v_newtype ,'(‘,v_length,’) UNSIGNED;’);
END LOOP;
SELECT v_text;
END

, , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies. ACEPTAR

Aviso de cookies