close
Breaking news

Todos los que tenemos alojamiento compartido hemos tenido a veces la necesidad d...read more

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

Etiquetas:

No Comments

Leave a reply

Post your comment
Enter your name
Your e-mail address

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Story Page

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