无法创建包含declare关键字的MySQL函数

时间:2015-05-06 06:17:18

标签: mysql function declare

我想创建一个这样的函数:

CREATE FUNCTION fn_geturlparam (param varchar(55), url varchar(2048))  RETURNS varchar(2048) CHARSET utf8 COLLATE utf8_general_ci
  BEGIN

    DECLARE val VARCHAR(2048);
    DECLARE _param VARCHAR(60) DEFAULT CONCAT(param,'=');

    SELECT
      CASE
        WHEN locate(concat('&',_param), url) > 0
          THEN right(url, length(url) - (locate(concat('&',_param),url)+length(concat('&',_param))-1))
        WHEN locate(concat('?',_param), url) > 0
          THEN right(url, length(url) - (locate(concat('?',_param),url)+length(concat('?',_param))-1))
        WHEN locate(concat('#',_param), url) > 0
          THEN right(url, length(url) - (locate(concat('#',_param),url)+length(concat('#',_param))-1))
        WHEN locate(_param,url) > 0
          THEN right(url, length(url) - (locate(_param,url)+length(_param)-1) )
        ELSE null
      END
    INTO val;

    SET val = replace(replace(left(val, locate('&',concat(val,'&'))-1),'%20','         '),'+',' ');

    RETURN val;
  END

我尝试了一切,但没有运气。我正在使用MySQL 5.5.15

这是错误:

  

#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以获得在''附近使用的正确语法。在第3行

1 个答案:

答案 0 :(得分:0)

您需要提供delimiter,还需要使用end关闭;

delimiter //

CREATE FUNCTION fn_geturlparam (param varchar(55), url varchar(2048))         RETURNS varchar(2048) CHARSET utf8 COLLATE utf8_general_ci
 BEGIN

    DECLARE val VARCHAR(2048);
    DECLARE _param VARCHAR(60) DEFAULT CONCAT(param,'=');

    select
    case
        when locate(concat('&',_param), url) > 0
    then right(url, length(url) -         (locate(concat('&',_param),url)+length(concat('&',_param))-1))
        when locate(concat('?',_param), url) > 0
    then right(url, length(url) -         (locate(concat('?',_param),url)+length(concat('?',_param))-1))
        when locate(concat('#',_param), url) > 0
    then right(url, length(url) -         (locate(concat('#',_param),url)+length(concat('#',_param))-1))
        when locate(_param,url) > 0
            then right(url, length(url) - (locate(_param,url)+length(_param)-1) )
    else null
    end
    into val;

    set val = replace(replace(left(val, locate('&',concat(val,'&'))-1),'%20','         '),'+',' ');

    RETURN val;
  END;//

delimiter ;
相关问题