2

この基本的なCURSORLOOPをTRANSACTIONで実行することすらできません。

助けてください。前もって感謝します!

CREATE PROCEDURE ClearItems(IN itemName CHAR)
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE bID INT(255);
    DECLARE bIDs CURSOR FOR SELECT id FROM table1 WHERE column1 = itemName AND column2 = 'b' ORDER BY column3 DESC, date ASC;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    START TRANSACTION;
        OPEN bIDs;
        clear_loop: LOOP
        FETCH bIDs INTO bID;
        IF done THEN
            LEAVE clear_loop;
            END IF;
        INSERT INTO table2 (column1) SELECT bID;
        END LOOP;
        CLOSE bIDs;
    COMMIT; 
END //
DELIMITER ;
4

1 に答える 1

2

問題を修正するには-宣言されたID変数の名前を変更します。フィールド名と変数は同じであってはなりません。


また、別のテーブルにデータを入力する場合は、INSERT...SELECTステートメントを使用してみてください。カーソルの使用を避けるのに役立ちます。例えば ​​-

INSERT INTO table2(`2column1`)
  SELECT id
    FROM table1
    WHERE `1column1` = itemName AND `1column2` = 'b'
    ORDER BY `1column3` DESC, date ASC;
于 2012-05-22T16:04:51.183 に答える