mysql - 无法创建包含声明关键字的 MySQL 函数

标签 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 - 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 '' at line 3

最佳答案

您需要提供分隔符,还需要使用;关闭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 ;

关于mysql - 无法创建包含声明关键字的 MySQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30068965/

相关文章:

mysql - 为每个不同的名称显示表中最近添加的行

python - 线程和 SQLAlchemy session

MySQL - 条件的正确位置在哪里?

python - 如何使用 'mother' 中继承的 'child class' 类的函数?

javascript - 调用javascript函数时什么时候使用()

python - 从 bash 将多个参数传递给 python 函数(在变量中)

SQLAlchemy 使用包含@DECLARE 本地表的原始 SQL 执行

types - Common Lisp 类型注释会导致不正常的行为吗?

c++ - G++ 错误 : In file included, 然后未声明 Foo

mysql加入多对多关系