Witam,
z racji tego iż muszę rozwiązać problem przetworzenia danych w tabeli, o którym pisałem tutaj na forum ( http://4programmers.net/Forum/Bazy_danych/222107-przetworzenie_wynikow_z_tabel_-_moze_ktos_pomoze ) zacząłem kombinować z kursorem i krótko mówiąc mam z nim problem, ponieważ zwraca on niezrozumiały dla mnie wynik.

Podam ostatni przykład, który zrobiłem w ramach testów;

 
DELIMITER $$
 CREATE PROCEDURE myProc()
 BEGIN
     DECLARE t_result_id INT(10);
     DECLARE t_participant_id INT(10);
     DECLARE t_ct_id  INT(10);
     DECLARE t_total_value INT(5);
     DECLARE done INT DEFAULT 0;
    
 
     DECLARE cur1 CURSOR FOR SELECT result_id,participant_id,total_value FROM result_ct_2 ;
 
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
 
     CREATE TEMPORARY TABLE IF NOT EXISTS temp_table
       (result_id INT(10), participant_id INT(10), ct_id INT(10), total_value INT(5));
 
     OPEN cur1;
     REPEAT
 
       FETCH cur1 INTO t_result_id, t_participant_id,t_total_value;
 
       INSERT INTO temp_table (result_id,participant_id,total_value)
           VALUES (t_result_id,t_participant_id,t_total_value);
 
     UNTIL done END REPEAT;
     CLOSE cur1;
     /* Print out the changed salaries*/
 
     SELECT result_id,participant_id,ct_id,total_value from temp_table
     ORDER BY result_id;
 END $$
 
 DELIMITER ;
 call myProc();
 

Wynik kształtuje się następująco:
user image

Prawa tabela to poprawny wynik uzyskany ze zwykłego select'a dla zwykłej tabeli.
Lewa tabela to **niepoprawny **wynik uzyskany z select'a z procedury z tabeli tymczasowej. Jak widać, z niewiadomych mi przyczyn ostatni wpis został powielony. Co ciekawe, wcześniej wykonywałem tą samą procedury tylko bez ostatniej kolumny (total_value) w FETCH i innych miejscach, i uzyskany wynik był różny od tego ostatniego... wtedy powielony został wpis o result_id = 8 .. 0.o

Może mi ktoś wytłumaczyć co tu się dzieje ? ;]
(z góry dzięki za zainteresowanie!)

Pozdrawiam,
Michał

EDIT:

Znalazłem rozwiązanie powyższego problemu - podobno mysql czasami nie potrafi dobrze w współdziałać z poleceniem:

 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

i należy w zastępstwie zastosować do iteracji:

 SELECT FOUND_ROWS() INTO numRows;

Trochę dziwna sprawa .. ale z drugiej strony przy mysql to pewnie nic nadzwyczajnego :P