mysql创建自定义函数与存储过程

mysql创建自定义函数与存储过程

一 创建自定义函数
  在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题

mysql表结构如下

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `pic` varchar(50) NOT NULL,
  `hashcode` varchar(16) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (‘1‘, ‘2012120910403250c3fa209bf48.jpg‘, ‘bf8f83818080c0f1‘);
INSERT INTO `test` VALUES (‘2‘, ‘2012120620430750c092db26557.JPG‘, ‘ff9880f0f680ceff‘);
INSERT INTO `test` VALUES (‘3‘, ‘2012120619582550c08861eb062.jpg‘, ‘7f7f004f7f7f7c7f‘);
INSERT INTO `test` VALUES (‘4‘, ‘2012112911072650b6d16e7f21f.jpg‘, ‘7f7f004f7f7f007f‘);

  其中

  pic字段为图片名称,

  hashcode是图片的感知哈希编码(16进制编码字符串,长度固定16位),

  用户输入一个hashcode,怎么从数据库中找出满足字符串对应位置的字符不同的个数小于5的记录呢?

  就像“11001”和“11101”对应位置不同字符不同的个数为1,

  比如 用户输入"7f7f004f7f7f00af",那么第三条和第四条记录是满足的,怎么实现呢?

  如果单纯的依靠mysql自带的函数很难完成,这时就需要建立自定义函数解决。

  这个问题的解决在此非常感谢csdn的acmain_chm,acmain_chm以及oschina的@梁小刚,还有@淘宝丁奇

建立自定义函数的过程如下:
1.进入mysql命令行

mysql>

2.用delimiter命令来把语句定界符从 ;变为//。这样就允许在程序体用;定界符传递到服务器,而不是被mysql自己来解释。

mysql> delimiter //

3.创建自定义函数

CREATE FUNCTION hashDiff( s1 varchar(16), s2 varchar(16))
 RETURNS INT
 BEGIN
 DECLARE diff, x INT;
 SET diff =0;
 SET x = 0;
 WHILE (x  < 16 )  DO
    SET x = x+1;
    if SUBSTRING(s1, x,1)<>SUBSTRING(s2, x,1) then
        set diff=diff+ 1;
    end if;
 END WHILE;
 RETURN diff;
 END
 //

二 创建存储过程

1.进入mysql命令行

mysql>

2.用delimiter命令来把语句定界符从 ;变为//。这样就允许在程序体用;定界符传递到服务器,而不是被mysql自己来解释。

mysql> delimiter //

3.创建存储过程

DELIMITER $$
    CREATE PROCEDURE `GetStocks`(int_stockcode  int)
    BEGIN
     SELECT COUNT(*) into  FROM  test;
    END $$
DELIMITER ;

CALL GetStocks(@a);

mysql创建自定义函数与存储过程

时间: 2025-01-31 21:37:17

mysql创建自定义函数与存储过程的相关文章

MySQL之自定义函数与存储过程

MySQL数据库常用函数与自定义函数 1 SELECT ABS(-8);#绝对值 2 SELECT MOD(10,9); #取模 3 SELECT FLOOR(12.99); #地板 4 SELECT CEILING(10.01);#天花板 5 SELECT ROUND(12.99);#随机数,看第一个小数点数 6 SELECT CONCAT('i','love','java');#拼接 7 SELECT * FROM t_user t WHERE t.`uname` LIKE CONCAT('

MySQL 创建自定义函数(1)

1. 创建测试自定义函数(1) CREATE DEFINER=`dbdh`@`localhost` FUNCTION `test`.`sp_function_dbdh_three`() RETURNS varchar(255) CHARSET utf8BEGIN    DECLARE l_NEW_STR VARCHAR(255);  -- 定义变量    DECLARE l_NAYIBU_NUM1   INT;     SET l_NAYIBU_NUM1=101; IF (l_NAYIBU_NU

mysql 报错之创建自定义函数

I experienced this error while trying to alter one of my stored procedures remotely on a master server. After some research, I ended up getting information from “Binary Logging of Stored Programs“. From MySQL Reference in verbatim:When you create a s

mysql流程控制、自定义函数、存储过程

修改结束符dilimiter $$ 分支 if 条件 then 语句 else if 条件 then 语句 else 语句 end if; 循环 while 条件 do 循环体 end while; 用户自定义变量 典型的变量:字段名就是变量,还有一些系统内置的变量 用户自定义变量需要使用 @作为变量名的前缀,用于区分是否是系统内置变量! set 变量名=变量值! //赋值set @height=10; 取值 //select @height; 系统内置函数 rand(),生成随机数的函数,得到

MySQL(六) —— 自定义函数

自定义函数 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 参数,返回值 创建自定义函数 CREATE FUNCTION function_name RETURNS [STRING|INTEGER|REAL|DECIMAL] routine_body //关于函数体 //1. 函数体有合法的SQL语句构成: //2. 函数体可以是简单的SELECT或INSERT语句: //3. 函数体如果为符合结构则使用BEGIN..E

sqlserver自定义函数与存储过程的区别 实例详解

分享下sql server自定义函数与存储过程的区别,一起来学习下. 一.自定义函数: 1. 可以返回表变量 2. 限制颇多,包括 不能使用output参数: 不能用临时表: 函数内部的操作不能影响到外部环境: 不能通过select返回结果集: 不能update,delete,数据库表: 3. 必须return 一个标量值或表变量 自定义函数一般用在复用度高,功能简单单一,争对性强的地方.二.存储过程 1. 不能返回表变量 2. 限制少,可以执行对数据库表的操作,可以返回数据集 3. 可以ret

扩展JMeter - 创建自定义函数 - String Joiner (翻译)

JMeter是测试自动化社区中最好的开源工具之一.它提供了所有可能的扩展,可以快速提供我们的测试脚本.为了让我们的生活更轻松,它还让我们通过实现几个接口来提出我们自己的插件. 在本文中,让我们看看如何创建自定义函数并使其出现在下面的JMeter 函数帮助器对话框中. 目标: 我的目标是创建一个简单的Join函数,它将使用给定的分隔符连接2个给定的字符串并将其存储在用户定义的变量中. 用法是   $ {__ join(string1,string2,delimiter,resultVariable

ORACLE创建自定义函数返回varchar类型

需求描述:两张表,如下,需要查询tmp1表中id_new在tmp2中的nameselect from tmp1; select from tmp2;方法一:好处:简单,直接sql展示劣处:如果主表数据量太大,十几亿的话,性能会大大下降,此时建议第二种方法select a.id_old,to_char(wm_concat(distinct a.id_new)) id_new,to_char(wm_concat(distinct b.name)) namefrom tmp2 b,(select a.

MySQL下创建序列及创建自定义函数方法介绍

工作过程中需要将基于DB2数据库的应用以及数据迁移到MySQL中去,在原应用中,大量使用了SEQUENCE,考虑尽量减少代码的修改,决定在迁移后的应用中继续保留SEQUENCE的使用,这就要求在MySQL中寻找替代SEQUENCE的解决方案. 在DB2中创建一个SEQUENCE的方法如下: DROP SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO; CREATE SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO AS BIGINT INCRE