MySQL fetch next cursor-Problem

Ich habe ein problem abrufen der Werte aus einer MySQL-cursor.

Erstelle ich eine temporäre Tabelle, die eine bloße Kopie eines anderen Tabelle (die ursprüngliche Tabelle hat den Namen einer Variablen, die übergeben wird als Prozedur-parameter, und weil MySQL nicht unterstützt variable Tabellennamen, habe ich eine Kopie erstellen, - können nicht die original-direkt).

Die temporäre Tabelle anzulegen geht ganz gut, alle Daten, die eigentlich in ihm vorhanden sind. Dann definiere ich einen cursor zum Durchlaufen meine temporäre Tabelle... wenn ich aber versuchen zu Holen aus dem cursor in eine while-Schleife meine Variablen werden nicht gefüllt mit Daten aus der "cursored" Tabelle... die meisten von Ihnen sind einfach ungültig, nur die letzten 2 scheinen die richtigen Werte drinnen.

Hier ist der Teil meines Codes:

-- variables to be filled from the cursor
DECLARE id,rain,snow,hs,clouds,rain2,cape,status,done int;
DECLARE v_v,v_u double;

-- cursor declaration
DECLARE iter CURSOR FOR (SELECT id,cape,rain,snow,hstones,clouds,raining,wind_u,wind_v FROM temp_tbl);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- drop the old temporary table if any
DROP TABLE IF EXISTS temp_tbl;

-- a statement to create the temporary table from a table with the specified name
-- (table_name is a parameter of the stored procedure this chunk is from)

SET @temp_table = CONCAT('CREATE TABLE temp_tbl AS SELECT * FROM ', table_name, ' WHERE 1'); 

-- prepare, execute and deallocate the statement
PREPARE ctmp FROM @temp_table;
EXECUTE ctmp;
DEALLOCATE PREPARE ctmp;

-- now the temp_table exists, open the cursor
OPEN iter;

WHILE NOT done DO

        -- fetch the values
        FETCH iter INTO id,cape,rain,snow,hs,clouds,rain2,v_u,v_v;

        -- fetch doesnt work, only v_u and v_v variables are fetched correctly, others are null

        -- ... further statements go here

END WHILE;

CLOSE iter;

Gibt es eine Typ-Prüfung innerhalb der FETCH-Anweisung, die möglicherweise dazu führen, dass solche problem? Die Spalten in meiner temporären Tabelle (welche abgeleitet ist aus dem original) sind nur kleine ints oder tiny-ints, so sollten diese perfekt kompatibel mit int-Werten, die ich verwenden in der fetch-Anweisung. Diese beiden letzten sind Doppelzimmer, aber komisch, dass nur diese beiden Doppel geholt. Auch die ID, int Spalte, die den Primärschlüssel nicht geholt.

Arbeite ich mit den dbForge Studio zu betreten und zu Debuggen mein Verfahren, aber das sollte nicht das problem sein.

InformationsquelleAutor NumberFour | 2010-02-25
Schreibe einen Kommentar