MySql中function定义和使用

      对SQL的高级应用, 很难不提到function,游标,异常处理等。MySql在1.5后也提供了类似的功能。给出相应的例子:

一      split方法:

ContractedBlock.gif ExpandedBlockStart.gif Code
DELIMITER //
DROP FUNCTION IF EXISTS Split//
CREATE FUNCTION Split(f_string VARCHAR(1000), f_delimiter VARCHAR(5)) RETURNS INT(11)
BEGIN
  
RETURN 1 + (LENGTH(f_string) - LENGTH(REPLACE(f_string, f_delimiter, '')));
END

 

二      游标:

ContractedBlock.gif ExpandedBlockStart.gif Code
DROP FUNCTION IF EXISTS GetValueForSpecial//
CREATE FUNCTION GetValueForSpecial (s VARCHAR(255), p VARCHAR(255)) RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
  
DECLARE returnValue VARCHAR(255);

  
DECLARE cur1 CURSOR FOR
    
SELECT PropertyValue FROM tempvalue where Server=and Property=p;
  
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET returnValue=NULL;
  
OPEN cur1;
  
-- we don't need to do repeat here for we just have one row returned.
  FETCH cur1 INTO returnValue;
  
CLOSE cur1;
  
RETURN returnValue;
end//

 

三      function

ContractedBlock.gif ExpandedBlockStart.gif Code
DROP FUNCTION IF EXISTS GetPropertyValue//
CREATE FUNCTION GetPropertyValue(item VARCHAR(255), properties VARCHAR(1000)) RETURNS VARCHAR(1000)
BEGIN
  
DECLARE propertyValue VARCHAR(1000);
  
DECLARE property VARCHAR(255);
  
DECLARE temp VARCHAR(255);
  
DECLARE len INT(8);
  
DECLARE i INT(8DEFAULT 0;
  
-- Get the length of current properties.
  SET len = Split(properties, ',');

  
-- repeat to get whole value.
  REPEAT SET i = i + 1;
    
SET property = SUBSTRING_INDEX(SUBSTRING_INDEX(properties, ',', i), ','-1);
    
SET temp = GetValueForSpecial(item, property);
    
IF(propertyValue IS NULLTHEN
      
SET propertyValue = temp;
    ELSEIF(
temp IS NOT NULLTHEN
      
SET propertyValue = CONCAT(propertyValue, ','temp);
    
END IF;
  UNTIL i 
>= len
  
END REPEAT;

  
RETURN propertyValue;
END

 

转载于:https://www.cnblogs.com/joechen/archive/2009/07/15/1523811.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值