- MySQL
- 2024-01-30
ストアドプロシージャで1行ずつデータを処理したいときはカーソルを使って処理します。
以下、簡単な例をご紹介します。
-- 読み出した値を格納する変数を宣言 DECLARE currentId INT; DECLARE currentColumnA VARCHAR(255); DECLARE currentColumnB VARCHAR(255); -- カーソルが最終行に達した判定するフラグ DECLARE done INT DEFAULT FALSE; -- カーソルを定義 DECLARE myCursor CURSOR FOR SELECT id, columna, columnb FROM example; -- カーソルが最終行に達したときの動作を制御 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- カーソルを開く OPEN myCursor; -- ループで1行ずつ処理 read_loop: LOOP -- カーソルから1行読み出し FETCH myCursor INTO currentId, currentColumnA, currentColumnB; -- カーソルからの読み出しが最後に達していればループを抜ける IF done THEN LEAVE read_loop; END IF; -- 読み出したデータを使用した処理等を書く END LOOP; -- カーソルを閉じる CLOSE myCursor;
505 views