2

これ

CREATE FUNCTION getTagID(tag VARCHAR(100)) RETURNS BIGINT

BEGIN
DECLARE tagID BIGINT;
            SET tagID = (SELECT id FROM tags WHERE text = tag);
IF tagID IS NULL
THEN
            (INSERT INTO tags (text) VALUES (tag));
            SET tagID = (SELECT LAST_INSERT_ID());
END IF;
RETURN tagID;
END

で失敗します

SQL 構文にエラーがあります。4行目のnear ''を使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

なんで?

この関数は、次の問題に関連しています。

結合されたテーブルに存在しない場合のmysql挿入

4

2 に答える 2

3

を変更して、ステートメントをDELIMITER囲む括弧を削除してみてください。INSERT

DELIMITER $$
CREATE FUNCTION getTagID(tag VARCHAR(100)) 
RETURNS BIGINT
BEGIN
    DECLARE tagID BIGINT;
    SET tagID = (SELECT id FROM tags WHERE text = tag);
    IF tagID IS NULL THEN
        INSERT INTO tags (text) VALUES (tag); -- don't put inside parenthesis
        SET tagID = (SELECT LAST_INSERT_ID());
    END IF;
    RETURN tagID;
END $$
DELIMITER ;
于 2013-03-21T13:09:25.267 に答える
2

次のように区切り文字を設定するに;;は、次のように入力します。

DELIMITER ;;

CREATE FUNCTION getTagID(tag VARCHAR(100)) RETURNS BIGINT
BEGIN
  DECLARE tagID BIGINT;
  SET tagID = (SELECT id FROM tags WHERE text = tag);
  IF tagID IS NULL
  THEN
    INSERT INTO tags (text) VALUES (tag);
    SET tagID = (SELECT LAST_INSERT_ID());
  END IF;
  RETURN tagID;
END;;

DELIMITER ;

区切り文字は、入力を個別のクエリに分割するために MySQL クライアント (サーバーではない) によって使用されます。デフォルトの区切り文字は;、MySQL クライアントが次のクエリをサーバーに送信するためのものです。

CREATE FUNCTION getTagID(tag VARCHAR(100)) RETURNS BIGINT

BEGIN
DECLARE tagID BIGINT

これは不完全であり、したがって正しくありません。

于 2013-03-21T13:11:04.350 に答える