ストアド関数を作成しようとしていますが、エラーが表示されて頭がおかしくなりました。スクリプトの何が問題なのか本当にわかりません。スクリプトにエラーはないと思いますが、その理由がわかりません。このエラーが発生しています:
1064 - SQL 構文にエラーがあります。「DECLARE cr1 CURSOR FOR SELECT codeArt, qte FROM LigneBonEntrée WHERE numBon = 」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
そして、これは私のスクリプトです:
DELIMITER $$
CREATE DEFINER=root@localhost FUNCTION verifierQteDemandee(numBonIn INT) RETURNS BOOLEAN
BEGIN
DECLARE numLignesBonEntrée, numLignesBonSortie INTEGER;
DECLARE codeArtLigneBonEntrée, codeArtLigneBonSortie, qteLigneBonEntrée, qteLigneBonSortie INTEGER;
DECLARE no_more_rows BOOLEAN;
DECLARE qteArticle INTEGER;
DECLARE test BOOLEAN DEFAULT TRUE;
SET numLignesBonEntrée = (SELECT COUNT(*) FROM LigneBonEntrée WHERE numBon = numBonIn);
SET numLignesBonSortie = (SELECT COUNT(*) FROM numLignesBonSortie WHERE numBon = (SELECT estLieA FROM LigneBonEntrée WHERE numBon = numBonIn));
IF numLignesBonEntrée <> numLignesBonSortie THEN
SET test = FALSE;
ELSE
DECLARE cr1 CURSOR FOR SELECT codeArt, qte FROM LigneBonEntrée WHERE numBon = numBonIn ORDER BY codeArt ASC;
DECLARE cr2 CURSOR FOR SELECT codeArt, qte FROM LigneBonSortieWHERE numBon = (SELECT estLieA FROM LigneBonEntréeWHERE numBon = numBonIn) ORDER BY codeArt ASC;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_rows = TRUE;
OPEN cr1;
OPEN cr2;
the_loop: LOOP
FETCH cr1 INTO codeArtLigneBonEntrée, qteLigneBonEntrée;
FETCH cr2 INTO codeArtLigneBonSortie, qteLigneBonSortie;
IF no_more_rows THEN
CLOSE cr;
LEAVE the_loop;
END IF;
IF codeArtLigneBonEntrée <> codeArtLigneBonSortie THEN
SET test = FALSE;
END IF;
IF qteLigneBonEntrée <> qteLigneBonSortie THEN
SET test = FALSE;
END IF;
END LOOP the_loop;
END IF;
RETURN test;
END$$
DELIMITER ;