摘要:本文主要讲解了存储过程的创建、调用、以及游标的使用
,相信掌握了游标 会对你有不错的帮助,有不足之处还请指教
导航
: 一、存储过程的创建及调用
二 、游标的使用
三、 示例
四、补充
说明:
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
drop procedure if exists add_test;
2、创建
create procedure add_test()
(
#[in|out|inout] 参数 datatype
a int;
b int;
)
begin
#SQL 语句;
end;
3、调用
call add_test(1,2
);
以上就是基本的创建方法,注意已下几点:
1 、在建立和调用时,add_test后面的“()”是必须的
2、MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”,并且参数不能指定默认值
。
3、包含多条 SQL 语句时,需要 begin end 关键字,在begin end里面的每条语句的末尾,都要加上分号 “;”
4、在begin end里面声明变量,使用关键字 DECLARE
,如:
begin
#声明一个name变量,类型是varchar(记得分号)
name varchar(32);
end;
二 、游标的使用
1、定义游标
/*
定义游标的关键字:CURSOR。
定义游标cursor_name,
游标cursor_name当前指针的记录
是一个表from_data的多行结果集
*/
DECLARE cursor_name CURSOR FOR select id,name
from from_data;
2、打开游标
#关键字:OPEN
OPEN cursor_name;
3、 获取游标
#声明两个变量
DECLARE a int
;
DECLARE b varchar(32)
;
/*
FETCH 获取游标当前指针的记录,并传给指定变量 a 、b
*/
FETCH cursor_name INTO a,b;
注意:(1、此处很重要,我们在后面的循环例子中会详细讲解如何用,
(2、注意变量数必须与MySQL游标返回的字段数以及类型一致,请看2,3步的标红处,
a的类型对应 id,b类型对应name
4、关闭游标
CLOSE cursor_name ;
以上就是游标的常见使用方法,关键的部分我已在每一步中说明,就不在多说了,现在我们看下例子:
三、示例
drop procedure if exists add_test;
# 创建存储过程 add_test
CREATE PROCEDURE add_test()
BEGIN
#定义 变量
DECLARE a int;
DECLARE b VARCHAR(30);
#此变可有可无,为了给个该存储函数执行成功后给个提示,运行下便知道
DECLARE str VARCHAR(300);
DECLARE x int;
#这个用于处理游标到达最后一行的情况
DECLARE s int default 0;
#声明游标cursor_name(cursor_name是个多行结果集)
DECLARE cursor_name CURSOR FOR select id ,name from from_data;
#设置一个终止标记
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
set str = "--";
#打开游标
OPEN cursor_name;
#获取游标当前指针的记录,读取一行数据并传给变量a,b
fetch cursor_name into a,b;
#开始循环,判断是否游标已经到达了最后作为循环条件
while s <> 1 do
set str = concat(str,x);
insert into to_data(id,name) values(a,b);
#读取下一行的数据
fetch cursor_name into a,b;
end while;
#关闭游标
CLOSE cursor_name ;
select str;
#语句执行结束
END;
#调用存储函数add_test
CALL add_test()
四、补充-关于ssh上运行
由于mysql的解释器默认情况下,delimiter是分号;
。在命令行客户端中,如果有一行命令以分号结束,
那么回车后,mysql将会执行该命令
,我们在此处有很多分号,这样很是不方便,
这种情况下,我只需
执行如下命令:
执行delimiter //
即可把分号结束换成//结束,然后在换回
delimiter ;
- 描述: from_data表结构图
- 大小: 14.8 KB
- 大小: 14.9 KB
分享到:
相关推荐
没做过实际的项目,一个简简单单的购物网站,希望大虾看一下,很想认一个师傅:我的QQ:408913851
可以进行简单的运算 是一个GUI程序 通过界面来运行
一个简简单单的状态栏显示器
简简单单清除系统lj 可执行文件 .bat
Java面试题题目一个,仅供学习参考
简简单单-无图版简简单单-无图版简简单单-无图版简简单单-无图版简简单单-无图版简简单单-无图版
很好用的ip设置工具,简简单单转换你的ip地址
网上什么打开powershell 输入命令什么的 ,没用;这块卸载工具亲测有用;以管理员身份运行,等待卸载完成后,重启电脑,OK。就这么简简单单。
#include using namespace std;...反正就是一个很简单的猜年龄游戏,用二分做的(做了好久好久好久)······ (很便宜的······) ······ ······ ······ return 0; }
用到time,random函数,while循环,适合初学者模仿 在程序中import是引用函数 random函数语句:=random.randint(1,10)#表示从1到10中随机 time函数语句:=time.perf_counter()#最后用初试时间-结束时间就等于所用...
面试某公司的面试题,关于Apply和call的区别,forEach和map的区别,防抖和节流的区别,浏览器打开网页的过程,希望对大家有帮助
在linuxredhat下 QT4.5.1编程,简简单单的一小程序经典程序 ----猜数字!!希望有所帮助!哈哈!
轻松制作电子书软件 简简单单3步,30余套封面模板让你制作封面既简单又美观。
简简单单学习ASP.NET.doc简简单单学习ASP.NET.doc简简单单学习ASP.NET.doc简简单单学习ASP.NET.doc简简单单学习ASP.NET.doc简简单单学习ASP.NET.doc简简单单学习ASP.NET.doc简简单单学习ASP.NET.doc简简单单学习ASP...
Tkinter+Flask+ThreeJS项目使用PyInstaller打包,做一个简简单单的表白程序!
简简单单学习ASP.NET简简单单学习ASP.NET简简单单学习ASP.NET
讲的是登录案例而已 讲解table标签的用法
简简单单的客户管理系统简简单单的客户管理系统
WCF开发简简单单的六个步骤 分布式开发 分布式开发分布式开发分布式开发