2017-04-14 4 views
0

このBEGIN TRYが私にエラーを投げかけている理由を理解しようと助けてくれる人が必要ですか?BEGIN試行のエラーコード1064

use my_guitar_shop; 
DROP PROCEDURE IF EXISTS update_product_discount; 
DELIMITER $$ 
CREATE PROCEDURE update_product_discount 
( 
    IN product_id INT, 
    IN discount_percent INT 
) 
BEGIN 
    BEGIN TRY 
     UPDATE products 
     SET discount_percent = discount_percent 
     WHERE product_id = product_id 
    END TRY; 
END; 
BEGIN CATCH 
    IF discount_percent < 0 THEN 
     SELECT 'The discount percent must be positive' AS message 
END CATCH; 
END $$ 


DELIMITER ; 
+0

in変数の名前を表の列名と同じにしないでください。 DBエンジンは、パラメータがテーブルの列または列に渡されたことを意味する場合に混乱しています。良い慣例はP_IN_FieldNameかP_OUT_Fieldnameで、それがinかoutputかどうかを知ることができます。 – xQbert

答えて

0

更新プログラムを試す前に、discount_percentをテストする必要があります。更新に問題がない限り、失敗してキャッチが表示されることはありません。

また、列名として変数に同じ名前を使用しないでください。

use my_guitar_shop; 
DROP PROCEDURE IF EXISTS update_product_discount; 
DELIMITER $$ 
CREATE PROCEDURE update_product_discount 
( 
    IN this_product_id INT, 
    IN new_discount_percent INT 
) 
BEGIN 
    IF discount_percent < 0 THEN 
     BEGIN 
      SELECT 'The discount percent must be positive' AS message; 
     END 
    ELSE 
     BEGIN 
      BEGIN TRY 
       UPDATE products 
       SET discount_percent = new_discount_percent 
       WHERE product_id = this_product_id; 
      END TRY 
      BEGIN CATCH 
       SELECT 'An error occured while saving.' AS message; 
      END CATCH 
     END 
    END 
END 
$$ 

DELIMITER ; 
+0

あなたのコードを追加しました。ASメッセージの後にENDで構文エラーが表示されます。私はまだTRY構文エラーを取得しています。そして今はCATCH構文エラーを出しています。 – Harvey

+0

2つのセミコロンがありませんでした。更新された回答をご覧ください。 –

+0

私を助けていただきありがとうございます。残念ながら、あなたが置いた修正には構文エラーがあります。私がまだやっているエラーは、始動して終了します。何らかの理由で、END CATCHの下のENDがEND IFを要求しています。 – Harvey

関連する問題