0

MySqlで関数をまとめています。主要なものは何もありません。しかし、それは保存しません。私はHeidiSqlを使ってこれをやっています。

CREATE DEFINER=`root`@`localhost` FUNCTION `mainLinks`(`nid` INT)
    RETURNS varchar(1500)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE aid INT;
    DECLARE atype INT;
    DECLARE aparent INT;
    DECLARE ausername VARCHAR(32);
    DECLARE auserid INT;
    DECLARE aCOUNTRY VARCHAR(2);
    DECLARE aOutput VARCHAR(1500); 

    SELECT id, type, parent, userName, userId, country
    INTO aid, atype, aparent, auserName, auserId, acountry
    FROM arraytest
    WHERE id = nid;

    CASE atype
    WHEN 1 THEN SET aOutput = 'One';
    WHEN 2 THEN SET aOutput = 'Two';
    WHEN 3 THEN SET aOutput = 'Three';
    ELSE 'Neither';
    END;

  RETURN (aOutput);
END

それcaseがすべての問題の原因であり、私はすべてを試しました。移動と削除;。しかし、それを機能させるものは何もありません。

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

`/* SQL Error (1064): 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 ''Neither';
    END;

  RETURN (aOutput);
END' at line 26 */`

この関数には 26 行目はありません。助けていただけますか?

データやその他のものを含むテーブル Fiddle

4

2 に答える 2

2

CASE 句がすべて間違っています

そのはず

SET aOutput = CASE atype
              WHEN 1 THEN 'One'
              WHEN 2 THEN 'Two'
              WHEN 3 THEN 'Three'
              ELSE 'Neither'
END;

編集

CREATE DEFINER=`root`@`localhost` FUNCTION `mainLinks`(`nid` INT)
    RETURNS varchar(1500)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE aid INT;
    DECLARE atype INT;
    DECLARE aparent INT;
    DECLARE ausername VARCHAR(32);
    DECLARE auserid INT;
    DECLARE aCOUNTRY VARCHAR(2);
    DECLARE aOutput VARCHAR(1500); 

    SELECT id, type, parent, userName, userId, country
    INTO aid, atype, aparent, auserName, auserId, acountry
    FROM arraytest
    WHERE id = nid;

    SET aOutput = CASE atype
        WHEN 1 THEN CONCAT (auserName, ' other stuff')
        WHEN 2 THEN auserName
        WHEN 3 THEN 'other stuff'
        ELSE 'default stuff'
    END;
    RETURN (aOutput);
END

sqlfiddle非常によく似たテストがOK

于 2013-06-06T13:17:30.753 に答える
0

エラーを引き起こしているのはケースステートメントです

CASE atype
WHEN 1 THEN SET aOutput = 'One';
WHEN 2 THEN SET aOutput = 'Two';
WHEN 3 THEN SET aOutput = 'Three';
ELSE 'Neither';
END;

する必要があります

CASE atype
    WHEN 1 THEN SET aOutput = 'One'
    WHEN 2 THEN SET aOutput = 'Two'
    WHEN 3 THEN SET aOutput = 'Three'
    ELSE 'Neither'
END CASE;
于 2013-06-06T13:18:05.410 に答える