3

私はこの問題に夢中です。

以下のストアド プロシージャは、カーソルを開き、結果を繰り返し処理して挿入を行います。

カーソルに使用される 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;
4

1 に答える 1

1

なぜ使用しないのINSERT ... SELECTですか?

INSERT INTO t01_stock_report_htry (t01date, t01client, t01desc)
  SELECT   in_date, in_client, CONCAT('Stack ', LOCATION)
  FROM     mfdtemp.opexstk_tmp
  WHERE    client = in_client AND DATE(rentdat) < in_date
  ORDER BY LOCATION
于 2012-06-11T09:32:30.097 に答える