1

Mysql (5.1) でトリガーを書き込もうとしていますが、次のエラーが発生します。助けてください。

エラーは次のとおりです。

SQL エラー (1064): SQL 構文にエラーがあります。5 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

トリガーを書き込む目的:

usercountユーザーを割り当てるアプリケーションを作成していますが、割り当てられていないフィールドcluster_countをテーブルに保存したいと考えていIX_branchdetailsます。ベーステーブルを更新した後。

引き金:

DELIMITER $$
CREATE  TRIGGER upd_trg AFTER
UPDATE ON DBNAME.BASETABLE
FOR EACH ROW 
BEGIN
DECLARE m_branchcode INTEGER;
DECLARE cnt INTEGER;
DECLARE cursor_branch CURSOR FOR
SELECT DISTINCT branchcode
FROM ix_branchdetails;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open cursor_branch;
my_loop: loop
set done = false;
fetch cursor_branch into m_branchcode;
if done then
leave my_loop;
end if;
select count(1) into cnt from (select count(1) from BASETABLE  Where IX_BRANCHCODE = m_branchcode) as temp;
update DBANAME.ix_branchdetails set DBANAME.ix_branchdetails.cluster_count = cnt where  DBANAME.ix_branchdetails.BRANCHCODE = m_branchcode;
end loop my_loop;
close cursor_branch;
END $$ 
DELIMITER ;
4

1 に答える 1

1

done変数の宣言が表示されません:

DECLARE done TINYINT DEFAULT FALSE;

セミコロン (;) は、MySQL ステートメントのデフォルトの区切り文字です。プロシージャ/関数/トリガーを定義するには、通常、ステートメント区切り文字がステートメントに表示されない文字列に変更されているのを確認します。

DELIMITER $$

CREATE PROCEDURE ...

END$$

DELIMITER ;

デリミタがセミコロンから変更されていない場合、MySQL がプロシージャ/関数/トリガーで最初のセミコロンに遭遇すると、それをステートメントの終わりとして認識しますが、これは意図したものではありません。MySQL がコードのブロック全体を 1 つのステートメントとして認識できるようにします。

于 2013-01-30T06:55:10.010 に答える