2015-05-06 19 views
0

我想創建這樣的函數MySQL的功能:無法創建包含關鍵字聲明

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

回答

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 ;