mysql でストアド プロシージャを作成するのに非常に苦労することがよくあります。本当に問題ないはずの構文が、ストアド プロシージャ内で解析されないだけです。これは、まだ解析されていない単純化されたバージョンです。このコードを解析可能なものに変換できません。
update..set 句で問題が発生する
更新
コードをさらに単純化しました。問題はまだ存在します。エラーメッセージが鳴り響くようです
更新 2
Mark Byers のおかげで解決しました。-statement 内のinto
節はselect
慎重に配置する必要があります。mysql のエラー メッセージがいかに誤解を招きやすく、ひどいものであるかに注意してください。
エラー 1064 (42000): SQL 構文にエラーがあります。マニュアルを確認する
UPDATE page SET lft = 1 where lft > 3 AN' at line 22
コード:
CREATE PROCEDURE `move_page_right`( subject_id SMALLINT UNSIGNED, reference_id SMALLINT UNSIGNED)
BEGIN
select
p.lft,
p.rgt,
p.rgt - p.lft,
p.rgt + 1
into
@subject_old_lft,
@subject_old_rgt,
@subject_width,
@subject_old_right_sibling_lft
from page p
where p.page_id = subject_id;
select p.rgt + 1
from page p
into @subject_new_lft
where p.page_id = reference_id;
UPDATE page
SET
lft = 1
where lft > 3 AND lft < 3;
END