私はこの問題に夢中です。
以下のストアド プロシージャは、カーソルを開き、結果を繰り返し処理して挿入を行います。
カーソルに使用される select ステートメントは、カーソルの外側 (SQL ウィンドウ内) で使用すると機能します。ただし、カーソルでは機能しません。カーソルを開くと、NULL が返されます。
このコードは、別のカーソルを開く別のストアド プロシージャによって呼び出されるストアド プロシージャ内にあることに注意してください。この情報かどうかはわかりません。便利です。
DECLARE location VARCHAR(255); -- location
DECLARE isLocationDone BOOL DEFAULT FALSE; -- status flag
DECLARE curLocation CURSOR FOR
SELECT `LOCATION` AS loc FROM `mfdtemp`.`opexstk_tmp`
WHERE `client` = in_client AND DATE(`rentdat`) < in_date
ORDER BY loc;
DECLARE
CONTINUE HANDLER FOR SQLSTATE '02000' SET isLocationDone = TRUE;
OPEN curLocation;
label_location_loop: LOOP
FETCH curLocation INTO location;
IF isLocationDone THEN
CLOSE curLocation;
LEAVE label_location_loop;
END IF;
INSERT INTO t01_stock_report_htry (
t01date, t01client, t01desc
)
VALUES (in_date, in_client, CONCAT_WS('', 'Stack ', location)
);
END LOOP;