;
を使用できるように、区切り文字を変更する必要があります 関数内:
DELIMITER $$
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE v_char VARCHAR(1);
DECLARE v_parseStr VARCHAR(3000) DEFAULT '';
WHILE (i <= LENGTH(prm_strInput) ) DO
SET v_char = SUBSTR(prm_strInput,i,1);
IF v_char REGEXP '^[A-Za-z0-9]$' THEN
SET v_parseStr = CONCAT(v_parseStr,v_char);
END IF;
SET i = i + 1;
END WHILE;
RETURN trim(v_parseStr);
END
$$
DELIMITER ;
MySQLコマンドラインクライアント
(および他の多くのSQLクライアント)デフォルトの区切り文字は;
です。 。したがって、元のコードを入力すると、MySQLは最初のコマンドが最初の;
で終了すると見なします。 が見つかりました(エラーメッセージに記載されているように5行目)。したがって、これは有効なSQLではないため、エラーが発生します。
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
区切り文字を他のものに変更すると、MySQLは完全なコマンドを識別します(CREATE FUNCTION
から) END
へ そしてそれを実行します。ボイラ!関数が作成されます。最後に、関数を実行すると、関数本体はデフォルトの区切り文字を使用する複数のステートメントで構成されているため、コードは正常に実行されます。