2011-02-09 27 views
5

Chciałbym uzyskać wszystkie nazwy kolumn z tabeli MySQL, przechodzić przez każdą nazwę kolumny, a następnie uruchomić procedurę składowaną, używając tych nazw kolumn jako zmiennej. Coś do skutku:mysql, iteracja poprzez nazwy kolumn

colnames = get column names from table 

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

Wygląda SHOW COLUMNS FROM myTable da mi nazwy kolumn, ale jak bym się nazwy kolumn w pętli?

Naprawdę chciałbym uruchomić to wszystko w procedurze przechowywanej przy użyciu natywnego kodu SQL. Ponieważ wciąż uczę się zawiłości MySQL, a to naprawdę pomogłoby w moim projekcie. Dzięki za pomoc.

+0

Co API używasz? – trojanfoe

+0

Po prostu chcę napisać to jako natywny SQL z poziomu workbencha MySQL. Planowałem użyć nazwy kolumny jako części zapytania UPDATE. – RyanDalton

Odpowiedz

14

Myślę, że chcesz coś takiego:

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

To wygląda dokładnie na to, po co jestem. Dzięki wielkie! Jednak pierwsza instrukcja SELECT działa, ale zawiesiłem się z błędem składni, gdy dodaję "DECLARE col_names CURSOR FOR". Jakieś myśli, dlaczego? – RyanDalton

+2

OK! Okazuje się, że wystarczy zmienić ogranicznik i zadeklarować num_rows, i, col_name i działa świetnie. Dzięki wielkie! – RyanDalton

+0

Nie ma za co. =) – user470714

4

można napisać kwerendę przeciwko information_schema uzyskać nazwy kolumn:

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

Nazwy kolumn są następnie zwracane, tak jak wszelkie dane z tabeli będzie.

+3

To doskonały początek, aby podać mi nazwy kolumn! W jaki sposób wstawiłbym je do zmiennej (list?) Do iteracji nad nimi? – RyanDalton