0

私は何日も前から MySQL のストアド プロシージャを使用してきましたが、うまくいかないので、基本に戻ってアイテムが存在するかどうかをチェックする非常に単純な関数を実行することにしました。

最初の問題は、IF 句の 1 つで END IF が無効な構文であり、他の 2 句では無効であると表示されたことです。2番目のものは、BEGINを有効な構文として認識しません...

すべてを間違えたのは私ですか、それとも MYSQL Workbench のバグに出くわしたのでしょうか? 私はWorkbench 5.2(これを書いているときの最新バージョン)を持っていて、これがコードです:

DELIMITER $$

CREATE FUNCTION `filmsidan`.`f_lateornot` (movie_id INT)
BEGIN
    DECLARE check_val INT;
    DECLARE return_val INT;

    SELECT stockId
    FROM orders
    WHERE stockId = movie_id
    INTO check_val;

    IF check_val <= 0
    THEN
        SET return_val = 1;
    ELSE
        SET return_val = 0;
    END IF;

    RETURN return_val;

END
4

3 に答える 3

1

署名で戻り値を指定する必要があり、最後に区切り文字がありません。したがって、関数は次のようになります。

DELIMITER $$  
CREATE FUNCTION `filmsidan`.`f_lateornot` (movie_id INT) RETURNS INT
BEGIN  
DECLARE check_val INT;     
DECLARE return_val INT;      
SELECT stockId     
FROM orders     
WHERE stockId = movie_id     
INTO check_val;      
IF check_val <= 0     
THEN         
SET return_val = 1;     
ELSE         
SET return_val = 0;     
END IF;      
RETURN return_val;  
END
$$ 
于 2012-05-25T13:13:01.253 に答える
1

「開始」構文エラーを修正するには、次のように戻り値を宣言する必要があります。

CREATE FUNCTION `filmsidan`.`f_lateornot` (movie_id INT) RETURNS INT(11)

それを行った後、ワークベンチはもうエラーを返しません;o)

于 2012-05-25T13:05:43.760 に答える
0
DELIMITER $$

CREATE FUNCTION `filmsidan`.`f_lateornot` (movie_id INT)
BEGIN
    DECLARE check_val INT;
    DECLARE return_val INT;

    SELECT stockId
    FROM orders
    WHERE stockId = movie_id
    INTO check_val;

    IF check_val <= 0
    THEN
        SET return_val = 1;
    ELSE
        SET return_val = 0;
    END IF;

    RETURN return_val;

END

$$

DELIMITER ;

この最後の機能を追加します。

$$

DELIMITER ;

これは、関数で ( ; ) this を使用していることを意味するので、その理由で使用します..参照

また、 MySQL - ユーザー定義関数 (UDF) の作成に関する問題も参照してください。

于 2013-12-06T12:57:31.013 に答える