1

MySQLプロシージャは初めてです。私は単にデータセット上でカーソルを実行しようとしており、行ごとに異なる手順を実行しています(私が知っている手順は機能します)。以下の3行目にエラーコード1064が表示されます。

CREATE PROCEDURE `safecycle`.`sp_aggregateAllPORDaily` ()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE porID SMALLINT UNSIGNED;
  DECLARE cur1 CURSOR FOR SELECT ID FROM point_of_recycle;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN cur1;

  read_loop: LOOP
    FETCH cur1 INTO porID;
    IF done THEN
      LEAVE read_loop;
    END IF;
    CALL sp_aggregatePORDaily(porID);
  END LOOP;

  CLOSE cur1;
END

私はしばらくの間壁に頭をぶつけてきました、そしていくつかの助けを大いに感謝します。

4

1 に答える 1

5

区切り文字を変更していないため、最初;に検出された場合はステートメント全体が終了します。

DELIMITER $$

CREATE PROCEDURE
    blah blah blah
END$$

DELIMITER ;

このように区切り文字を変更することで、マルチステートメントプロシージャを安全に定義し、その;中に法線を埋め込んでから、createステートメントを「new」区切り文字で終了できます。その後、標準の区切り文字を復元して、通常どおり続行します。

于 2012-04-15T04:45:28.163 に答える