mysql 存储过程例子

来源:互联网 发布:程序员未来的发展趋势 编辑:程序博客网 时间:2024/06/08 09:07
(1)循环遍历值

drop procedure if exists doit ;/* *delimiter表示以//结束编译 * */delimiter //create procedure doit (in parameter integer)begindeclare v1 int ;set v1 = parameter ;set parameter = 90 ;while v1>0 doselect 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  doexecute 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 ;


0 0