5

MySQL v5.1.36 を使用しており、このコードを使用してストアド関数を作成しようとしています。

DELIMITER //
CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RETURNS INT DETERMINISTIC
    BEGIN
    DECLARE y INT;
    SELECT id INTO y
    FROM `modx`.coverage_state
    WHERE `coverage_state`.name = x;
    RETURN y;
    END//

MySQL コンソールに入ると、この応答が返されます。

mysql>  DELIMITER //
mysql>  CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RETURNS INT DETERMINISTIC
    ->          BEGIN
    ->          DECLARE y INT;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '' at
line 3
mysql>          SELECT id INTO y
    ->          FROM `modx`.coverage_state
    ->          WHERE `coverage_state`.name = x;
ERROR 1327 (42000): Undeclared variable: y
mysql>          RETURN y;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'RETUR
N y' at line 1
mysql>          END//

私がオンラインで見つけることができるものから、私の構文は正しいです。私は何を間違っていますか?

4

2 に答える 2

7

関数/手順を mysql コンソールから作成する場合、最初のコマンドはDELIMITER //. それ以外の場合は、デフォルトの区切り文字 ( ;)を使用します。

于 2010-08-04T15:20:16.853 に答える
6

変数の周りに `` を追加することで問題を解決しました。これが私が最終的に得たコードです。

DELIMITER //
CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RETURNS INT DETERMINISTIC
    BEGIN
    DECLARE `y` INT;
    SELECT id INTO `y`
    FROM `modx`.coverage_state
    WHERE `coverage_state`.name = `x`;
    RETURN `y`;
    END//
DELIMITER ;
于 2010-08-04T15:16:27.067 に答える