bitscn.com
mysql官方手册学习笔记3—mysql中的存储过程简介 相关链接:mysql官方手册学习笔记1—mysql简单上手http:///database/201210/159522.html;mysql官方手册学习笔记2—mysql的模糊查询和正则表达式http:///database/201210/160095.html select into create procedure sp1 (x varchar(5)) //创建储存过程 begin declare xname varchar(5) default 'bob'; //声明局部变量 declare newname varchar(5); declare xid int; select xname,id into newname,xid //将查到的属性值存入变量中 from table1 where xname = xname; select newname; end; 变量名不能与列名一样,当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。 handler mysql> create table test.t (s1 int,primary key (s1)); query ok, 0 rows affected (0.00 sec) mysql> delimiter // //将定界符“;”改为“//”,因为程序中需要用到“;”。 mysql> create procedure handlerdemo () -> begin -> declare inserterr condition for sqlstate '23000'; //声明condition -> declare continue handler for inserterr set @x2 = 1;//声明handler -> set @x = 1; //为局部变量赋值 -> insert into test.t values (1); -> set @x = 2; -> insert into test.t values (1); -> set @x = 3; -> end; -> // query ok, 0 rows affected (0.00 sec) mysql> call handlerdemo()// query ok, 0 rows affected (0.00 sec) mysql> select @x// +------+ | @x | +------+ | 3 | +------+ 1 row in set (0.00 sec) 注意到,@x是3,这表明mysql被执行到程序的末尾。如果declare continue handler for inserterr set @x2 = 1; 这一行不在,第二个insert因primary key强制而失败之后,mysql可能已经采取 默认(exit)路径,并且select @x可能已经返回2。 cursor create procedure curdemo() begin declare done int default 0; declare a char(16); declare b,c int; declare cur1 cursor for select id,data from test.t1; declare cur2 cursor for select i from test.t2; declare continue handler for sqlstate '02000' set done = 1; open cur1; //使用前先打开游标 open cur2; repeat fetch cur1 into a, b; fetch cur2 into c; if not done then if b delimiter // mysql> create procedure dorepeat(p1 int) -> begin -> set @x = 0; -> repeat set @x = @x + 1; until @x > p1 end repeat; -> end -> // query ok, 0 rows affected (0.00 sec) mysql> call dorepeat(1000)// query ok, 0 rows affected (0.00 sec) mysql> select @x// +------+ | @x | +------+ | 1001 | +------+ 1 row in set (0.00 sec) while create procedure dowhile() begin declare v1 int default 5; while v1 > 0 do ... set v1 = v1 - 1; end while; en bitscn.com