六三科技网
您的当前位置:首页mysql存储过程事例

mysql存储过程事例

来源:六三科技网


mysql 存储过程例子 (1)循环遍历值 drop procedure if exists doit ;/* *delimiter表示以//结束编译 * */delimiter //create procedure doit (in parameter integer)begindeclare v1 int ;set v1 = parameter ;set parameter = 90 ;while v10 doselect now(

mysql 存储过程例子
(1)循环遍历值

drop procedure if exists doit ;
/*
 *delimiter表示以//结束编译
 *
 */
delimiter //

create procedure doit (in parameter integer)
begin
declare v1 int ;
set v1 = parameter ;
set parameter = 90 ;
while v1>0 do
	select now();
	set v1 = v1 - 1 ;
end while ;

select parameter ;
end;
//
delimiter ;

(2)动态执行sql并注入参数

drop procedure if exists test_insert ;
-- delimiter表示以//结束编译
delimiter //

create procedure test_insert(in num int) 
 begin
 -- 使用变量时不能使用declare 只能用set @id = .. 模式
 -- declare v1 int(11);
 set @v1=num ;
 -- declare sql varchar(200);
 -- declare name varchar(20);
 set @name='wxlan' ;
 set @sql='insert into test values(?,?,now())' ;
 prepare state_ from @sql ;
 while @v1 > 0 do
	execute state_ using @v1,@name ;
	set @v1 = @v1 -1 ;
 end while ;
 end;
 //
 delimiter ;

(3)游标是使用

drop procedure if exists test_cursor ;
-- delimiter表示以//结束编译
delimiter //

create procedure test_cursor(out result varchar(128)) 
 begin
 -- 游标所使用变量需要在定义游标之前申明
 declare id int(11);
 declare name varchar(20);
 -- 遍历数据结束标志 注意位置顺序
 DECLARE done INT DEFAULT FALSE;
 -- 注意用别名 因为id在上面已经有定义所以需要使用表的别名区别
 declare cur_test CURSOR for select t.id,t.name from test t;
 -- 将结束标志绑定到游标 
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
 open cur_test;
 repeat
 fetch cur_test into id, name;
	 select id ;
	 -- concat_ws函数用逗号后面的参数隔开 concat_ws(',','12','33','332') --> 12,33,332
 select concat_ws(',',result,id,name) into result ;
 until done
	 end repeat;
 close cur_test; 
 
 select result ;
 end;
 //
 delimiter ;
显示全文