MySQLのFUCTIONでSyntaxエラーがでます。助けて下さい。


Version:
MYSQL Ver 14.14 Distrib 5.5.27, for Win32 (x86)

ERROR:
ERROR 1064 (42000) at line 1: 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 'IN P_STRING VARCHAR , IN P_DELIMIT VARCHAR, IN P_POS
INTEGER ) RETURN VARCHAR' at line 1

SQL:

CREATE FUNCTION UsrTOKEN(IN P_STRING VARCHAR , IN P_DELIMIT VARCHAR, IN
P_POS INTEGER )
RETURN VARCHAR
BEGIN
DECLARE P_EOD VARCHAR;
DECLARE P_NTH INTEGER;
DECLARE vStartPos INTEGER;
DECLARE vEndPos INTEGER;
P_EOD := NULL;
P_NTH := 1;
IF (P_POS = 1) THEN
vStartPos := 1;
ELSE
vStartPos := INSTR(P_STRING, P_DELIMIT, 1, P_POS - 1);
IF (vStartPos = 0) THEN
RETURN P_EOD;
END IF;
vStartPos := vStartPos + 1;
END IF;
vEndPos := INSTR(P_STRING, P_DELIMIT, vStartPos, P_NTH);
IF (vEndPos = 0) THEN
RETURN SUBSTR(P_STRING, vStartPos);
END IF;
RETURN SUBSTR(P_STRING, vStartPos, vEndPos - vStartPos);
END;

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/09/19 14:10:03
id:rabbit15p

文字列から区切り文字を指定して何個目かの文字列を抽出するFUCTIONを作ろうとしています。

ネットからPL/SQL用のを拾ってきたのですが、知識不足で旨くカスタマイズできません。

エラーではじかれて部分以外にも間違いが潜んでいるかもしれません。

よろしくお願いします。

回答0件)

回答はまだありません

  • id:rouge_2008
    MySQL用ではないようですので、MySQLの構文を確認して修正する必要があると思います。
    IN、OUT、INOUTパラメータはFUNCTIONではなくPROCEDUREのパラメータです。
    デフォルトでINなので、FUNCTIONでは指定する必要がないようです。
    また戻り値の型を指定する「RETURNS type」も足りないようです。

    http://dev.mysql.com/doc/refman/5.1/ja/create-procedure.html
    ----------------------------------------------------------
    CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body


    func_parameter:
    param_name type

    ***************************************

    デフォルトで各パラメータはINパラメータです。上記とは別にパラメータの属性を特定する場合、OUT またはINOUTキーワードをパラメータ名の前で使用してください。

    注:パラメータにIN、OUTしくはINOUTと特定することはPROCEDUREに対してのみ有効です。(FUNCTIONパラメータは常にINパラメータと見なされます。

    ----------------------------------------------------------

    戻り値を定義している構文の部分については分かりません。
  • id:rabbit15p
    rouge_2008さんありがとうございます。

    PROCEDUREと
    ごっちゃになっているかもしれません。

    MySQLの本も探してみます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません