mysql 存储过程,传人字符串数组

mysql存储过程解决数组传参及游标CURSOR的问题解决方案

  项目中遇到批量数据的处理,使用hibernate的出来太慢,修改为存储过程。

第一版修改为应用循环调存储过程,发现效果不理想。可能是频繁的打开session和关闭。

第二版想法为,把所有参数传入到存储过程,循环参数为一个数组,mysql存储过程里没有split函数,

取数组中的值通过substring截出,通过截的id值作为条件查询数据,查询到的数据有可能是

多条记录,所有想通过游标(CURSOR)进行结果集的循环进行处理,但是,

游标(cursor)的特性

1,只读的,不能更新的。
2,不滚动的
3,不敏感的,不敏感意为服务器可以活不可以复制它的结果表

游标(cursor)必须在声明处理程序之前被声明,并且变量和条件必须在声明游标或处理程序之前被声明。

第三版想法为,建立俩个存储过程,第一个为截窜并调起第二个实际处理的存储过程。

已下截窜存储过程来自网络:

drop procedure if exists Pro_DeleteLog; -- 存在即删除
create procedure Pro_DeleteLog( Qualification varchar(100)) -- 定义参数
begin
declare i int ; 
declare Start1 int; 
declare Length int ;
declare TotalLenght int ;
declare filed varchar(100) ;
declare sqlStr varchar(2000) ;
declare stmtNovelSearch varchar(2000) ;
set i=1;
set Start1=1;
set Length=0;
set TotalLenght=length(Qualification); -- 计算输入参数长度
select TotalLenght; 
while i <=TotalLenght do -- i=1 开始
-- select SUBSTRING(Qualification,i,1);
if(SUBSTRING(Qualification,i,1)=‘,‘) -- 注意 mysql 的substring函数截取字符串是从1开始的,而不是0 与java JavaScript不同。
-- 从第i位开始截取一个字符,看是否等于,
then 
set filed=SUBSTRING(Qualification,Start1,Length);-- 从start1开始截取length长度的字符 
select filed; 
call pro_do(filed);
set Start1=i+1; 
set Length=0;
else
set Length=Length+1; -- 如果不是, 则截取的长度加1 
end if;
set i=i+1; 
end while;
end
-- 调用存储过程 字段名以,分隔 注意最后 , 结尾
call Pro_DeleteLog(‘payload,backresult,dataset,effectrow,clientuser,loginuser,clientprg,‘)

转载:http://www.cnblogs.com/bigcelestial/archive/2013/09/05/3303329.html

时间: 2024-10-26 07:57:14

mysql 存储过程,传人字符串数组的相关文章

mysql存储过程中遍历数组字符串的两种方式

第一种:多次使用substring_index()的方法 DELIMITER $$ DROP PROCEDURE IF EXISTS `array`$$ CREATE  PROCEDURE `array`() BEGIN SET @array_content="www mysql com hcymysql blog 51cto com"; SET @i=1; SET @count=CHAR_LENGTH(@array_content)-CHAR_LENGTH(REPLACE(@arra

利用MySQL存储过程分割字符串

(转)http://tec.5lulu.com/detail/104krn1e6p2w78d77.html 现有一段字符串,如apple,banana,orange,pears,grape,要把它按照逗号(,)分割成: apple banana orange pears grape 然后使用where in()方法可以查询. 1.具体函数: # 函数:func_split_TotalLength DELIMITER $$ DROP function IF EXISTS `func_split_T

mysql存储过程中字符串参数单引号

注意:存储过程中单引号  ,四个单引号 SET @sql = CONCAT('select user_id into ',m_user_id,' from go_user where mobile =','''',p_user_name,'''',' AND password=','''',p_password,'''');

MySQL存储过程详解 mysql 存储过程

MySQL存储过程详解  mysql 存储过程 (2010-12-13 10:59:38) 转载▼ 标签: it 分类: mysql mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保

MySQL 存储过程检测表是否存在

SQL语句实现: SELECT COUNT(*) FROM information_schema.`TABLES` WHERE TABLE_NAME='youTableName'; where子句中,表名是字符串类型,要加单引号. MySQL存储过程中 函数实现: CREATE DEFINER = `root`@`localhost` FUNCTION `tableExists`(`tName` varchar(30))  RETURNS tinyint(4) BEGIN DECLARE tab

MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)

转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和

mysql存储过程详解

1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以

MySQL存储过程的基本函数(三)

(1).字符串类 首先定义一个字符串变量:set @str="lxl";CHARSET(str) //返回字串字符集 select charset(@str);+---------------+| charset(@str) |+---------------+| utf8          |+---------------+ CONCAT (string [,... ]) //连接字串 select concat(@str,"hello");+---------

mysql存储过程语法及实例

存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程create procedure sp_name()begin.........end 二.调用存储过程1.基本语法:call sp_name()注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递 三.删除存储过程1.基本语法:drop procedure sp_name// 2.注意事项(1