2011-02-09 34 views
5

Me gustaría obtener todos los nombres de columna de una tabla MySQL, recorrer cada nombre de columna y luego ejecutar un procedimiento almacenado usando esos nombres de columna como una variable. Algo en el sentido de:mysql, iterar a través de los nombres de columna

colnames = get column names from table 

for each colname 
    if something changed then 
    do something 
    else 
    do something else 

Parece que SHOW COLUMNS FROM myTable me dará los nombres de columna, pero ¿cómo puedo obtener los nombres de columna en un bucle?

Me gustaría ejecutar todo esto en un procedimiento almacenado utilizando SQL nativo. Ya que todavía estoy aprendiendo las complejidades de MySQL, y esto realmente ayudaría a mi proyecto. Gracias por tu ayuda.

+0

Qué API está utilizando? – trojanfoe

+0

Solo quiero escribir esto como SQL nativo desde MySQL workbench. Estaba planeando usar el nombre de columna como parte de una consulta de ACTUALIZACIÓN. – RyanDalton

Respuesta

14

Creo que quieres algo como esto:

DECLARE col_names CURSOR FOR 
    SELECT column_name 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'tbl_name' 
    ORDER BY ordinal_position; 


select FOUND_ROWS() into num_rows; 

SET i = 1; 
the_loop: LOOP 

    IF i > num_rows THEN 
     CLOSE col_names; 
     LEAVE the_loop; 
    END IF; 


    FETCH col_names 
    INTO col_name;  

    //do whatever else you need to do with the col name 

    SET i = i + 1; 
END LOOP the_loop; 
+0

Eso parece exactamente lo que estoy buscando. ¡Muchas gracias! La primera instrucción SELECT funciona, sin embargo, estoy colgando con un error de sintaxis cuando agrego "DECLARAR col_names CURSOR FOR". ¿Alguna idea de por qué? – RyanDalton

+2

¡Bien! Resulta que solo necesitaba cambiar el delimitador y declarar num_rows, i, col_name y funciona muy bien. ¡Muchas gracias! – RyanDalton

+0

De nada =) – user470714

4

Puede escribir una consulta en INFORMATION_SCHEMA para obtener los nombres de columna:

SELECT column_name 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'tbl_name' 
    ORDER BY ordinal_position 

Los nombres de las columnas se devuelven luego al igual que todos los datos de una tabla serían.

+3

¡Es un excelente comienzo para darme los nombres de las columnas! Sin embargo, ¿cómo los pondría en una variable (¿list?) Para iterar sobre ellos? – RyanDalton

Cuestiones relacionadas