Saltar al contenido

Common_schema: tareas repetitivas con foreach

MySQL
Etiquetas:

Aunque hemos hablado varias veces de este framework de MySQL-MariaDB, hoy os traigo una nueva función, muy útil cuando necesitas realizar tareas repetitivas basadas en consultas. Se trata de utilizar call foreach. Aquí expongo un ejemplo práctico de cómo lo he usado yo para ejecutar una tarea concreta: reemplazar todos los valores nulos a cero en una tabla con un monton de campos.

Localizando los campos de la tabla

Para localizar los campos a los que aplicar la rutina, qué mejor que utilizar information_schema, que es una de las bases de datos internas de MySQL.

La consulta utilizada es esta, teniendo en cuenta que la base de datos se llama inst7 y la tabla se llama datos:

SELECT c.column_name FROM information_schema.`COLUMNS` c
WHERE TABLE_SCHEMA = “inst7” and TABLE_NAME = “datos” ORDER BY c.column_name

El resultado de la misma:

common_schema foreach

common_schema foreach

Ya tenemos todos los campos donde hay que modificar los datos que sean nulos a cero. Ahora sólo necesitamos construir la sentencia SQL, tal que así:

UPDATE datos SET campo = 0 WHERE campo is null

Usando foreach

La forma de utilizar foreach está explicada aquí: http://code.openark.org/blog/mysql/mysql-foreach, así que vamos a ponerla en práctica.

Foreach tiene una cosa muy buena, y es que la sintaxis nos permite usar {1} y {2} para nombrar al primer campo, al segundo, … En nuestro caso, sólo necesitamos 1 campo.

La sentencia que necesitamos preparar quedaría:

UPDATE datos SET ${1} = 0 WHERE ${1} is null

La sentencia a utilizar es:

call common_schema.foreach(‘SELECT c.column_name FROM information_schema.`COLUMNS` c
WHERE TABLE_SCHEMA = “inst7” and TABLE_NAME = “datos”‘,’UPDATE inst7.datos SET ${1} = 0 WHERE ${1} is null’);

Y aquí tenemos ejecutándo el proceso:

common_schema foreach

common_schema foreach

En definitiva, una función muy practica para ejecutar tareas repetitivas, utilizando un framework muy completo. Observese que no ha hecho falta utilizar la función CONCAT para unir cadenas!

Espero que les sea de utilidad.

Manejando Datos Newsletter

Noticias, entradas, eventos, cursos, … News, entrances, events, courses, …


Gracias por unirte a la newsletter. Thanks for joining the newsletter.