mysql存储过程select循环_简简单单储存过程——循环⼀个
select结果集
摘要:本⽂主要讲解了存储过程的创建、调⽤、以及游标的使⽤ ,相信掌握了游标 会对你有不错的帮助,有不⾜之处还请指教
导航 : ⼀、存储过程的创建及调⽤
⼆ 、游标的使⽤
mysql查看所有存储过程三、 ⽰例
四、补充
说明:
1、⽤到的两个数据表:
from_data
to_data
2、⽰例需求 : 将表from_data 的select结果集循环插⼊到表to_data;
伪代码:while 循环 select id ,name from_data
insert into to_data(id,name) value(from_data.id,from_data.name)end
3、环境: mysql
⼀、存储过程的创建及调⽤
我们创建⼀个名叫 add_test的存储过程
1 、检查是否有 add_test
Sql代码
drop procedure if exists add_test;
2、创建
Sql代码
create procedure add_test()
(#[in|out|inout] 参数 datatype
a int;
b int;
)
begin#SQL 语句;
end;
3、调⽤
Sql代码
call add_test(1,2);
以上就是基本的创建⽅法,注意已下⼏点:
1 、在建⽴和调⽤时,add_test后⾯的“()”是必须的
2、MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”,并且参数不能指定默认值 。
3、包含多条 SQL 语句时,需要 begin end 关键字,在begin end⾥⾯的每条语句的末尾,都要加上分号 “;”
4、在begin end⾥⾯声明变量,使⽤关键字 DECLARE ,如:
Sql代码
begin#声明⼀个name变量,类型是varchar(记得分号)
name varchar(32);end;
⼆ 、游标的使⽤
1、定义游标
Sql代码
/*定义游标的关键字:CURSOR。
定义游标cursor_name,
游标cursor_name当前指针的记录
是⼀个表from_data的多⾏结果集*/
DECLARE cursor_name CURSOR FOR select id,name
from from_data;
2、打开游标
Sql代码
#关键字:OPEN
OPEN cursor_name;
3、 获取游标
Sql代码
#声明两个变量
DECLAREa int
;DECLARE b varchar(32)
;/*FETCH 获取游标当前指针的记录,并传给指定变量 a 、b*/FETCH cursor_name INTO a,b;
注意:(1、此处很重要,我们在后⾯的循环例⼦中会详细讲解如何⽤,
(2、注意变量数必须与MySQL游标返回的字段数以及类型⼀致,请看2,3步的标红处,
a的类型对应 id,b类型对应name
4、关闭游标
Sql代码
CLOSE cursor_name ;
以上就是游标的常见使⽤⽅法,关键的部分我已在每⼀步中说明,就不在多说了,现在我们看下例⼦:三、⽰例
Sql代码
1 drop procedure ifexists add_test;
2 #创建存储过程 add_test
3
4
5 CREATE PROCEDURE add_test()6
7 BEGIN8 #定义 变量
9
10
11 DECLAREa int;12 DECLARE b VARCHAR(30);13
14 #此变可有可⽆,为了给个该存储函数执⾏成功后给个提⽰,运⾏下便知道
15
16
17 DECLARE str VARCHAR(300);18 DECLAREx int;19
20 #这个⽤于处理游标到达最后⼀⾏的情况
21
22
有pycharm还需要anaconda吗23 DECLARE s int default 0;24
25 #声明游标cursor_name(cursor_name是个多⾏结果集)
26
27
28 DECLARE cursor_name CURSOR FOR select id ,name from from_data;29表示异步传输模式的是
30 #设置⼀个终⽌标记
31
32
33 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;34
35
36 set str = "--";37 #打开游标
38
39
40 OPEN cursor_name;41
42 #获取游标当前指针的记录,读取⼀⾏数据并传给变量a,b
43
44
45 fetch cursor_name into a,b;46 #开始循环,判断是否游标已经到达了最后作为循环条件
47
48
49 while s <> 1 do
50 set str = concat(str,x);51
52 insert into to_data(id,name) values(a,b);53 #读取下⼀⾏的数据
54
55
56 fetch cursor_name into a,b;57
58 end while;59
60 #关闭游标
61c语言中sqrt函数怎么用
62
63 CLOSE cursor_name ;64积木编程语言
65 select str;66
67 #语句执⾏结束
68
69
70 END;71
72 #调⽤存储函数add_test
73
74
75 CALL add_test()
个人介绍网页设计作品欣赏四、补充-关于ssh上运⾏
由于mysql的解释器默认情况下,delimiter是分号; 。在命令⾏客户端中,如果有⼀⾏命令以分号结束,那么回车后,mysql将会执⾏该命令 ,我们在此处有很多分号,这样很是不⽅便, 这种情况下,我只需执⾏如下命令:
执⾏delimiter //
即可把分号结束换成//结束,然后在换回delimiter ;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论