- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章存储过程
第七章 过程式数据库对象
7.1 存储过程
存储过程的创建格式:
格式:
create procedure 存储过程名称([参数列表])
[begin]
存储过程中执行的命令序列;
[end] 结束符
参数的定义(参数可有可无,但小括号必须要),包括三部分:
输入|输出模式
in 输入型参数(默认),从外部调用环境将值输入到存储过程内部,传递的方向:实参值-(形参变量
out 输出型参数,从存储过程输出值到外部调用环境的变量,传递的方向:形参变量-(实参变量
in|out 输入|输出型参数,从外部调用环境将值输入到存储过程内部,对数据进行处理,然后将新的结果再由存储过程输出到外部调用环境的变量,传递的方向:实参变量-(形参变量-(实参变量
参数名称
数据类型
例如:
create procedure addValue1(in oper1 int,in oper2 int,out sum int)……
create procedure swapValue(inout oper1 int,inout oper2 int)……
结束符的定义:
结束符定义的原因:因为在mySQL环境中 默认使用分号 作为结束符号,而每条语句输入完成后也是使用分号作为结束标记的。因此在定义存储过程的内部,如果需要写入多条语句,那么在第一条语句结束写 分号 的时候,整个存储过程的定义也就被结束了,因此,需要为mySQL环境定义额外的结束符作为结束标记。
结束符定义的格式:
delimiter 结束符号
结束符的使用:
在存储过程内部(即begin end之间)仍然使用 分号 作为语句的结束标志。
在存储过程定义结束后(即 end 的后面) 需要使用自己定义的结束符作为整个存储过程定义结束的标志。
在存储过程中处理2条以上命令的时候,应该加上begin...end,如果只包含1条语句,可以省略begin...end关键字。
例如:
create procedure pro1()
set @a=100;
$
create procedure pro2()
begin
set @a=100;
set @b=1000;
end;
$
简单存储过程的例题
不执行任何操作的存储过程
delimiter !
create procedure pro3()
begin
end!
存储过程的执行:call 存储过程名称([实参列表]);
在别的数据库语言中这样做是不允许的。因为它们要求begin 和 end 之间至少存在一条语句。如下面的代码:
create procedure pro4()
begin
null;
end!
使用null关键字表示不执行任何操作,但是这样做在MySQL中是不允许的。
查看错误信息 show errors
存储过程中的注释符号:
单行注释符
-- 该注释符需要注意:注释符和注释的内容之间要 有空格,否则语法错误
# 该注释符和注释的内容之间的空格可有可无
多行注释符
/*……*/
例题:
create procedure pro5()
begin
set @a=100; -- 定义一个用户变量@a
set @b=1000;#定义一个用户变量@b
set @c=1000;/*定义一个
用户变量@c*/
end;
$
局部变量的定义和使用
局部变量的概念:在存储过程内部声明的变量,称为局部变量,这样的变量只能局限于存储过程内部使用。该变量不同于前面学的用户变量。
局部变量的定义:
在begin…end之间进行定义。
使用declare关键字进行定义,并且定义的同时可以赋值。格式:
declare 变量名,[变量2] 数据类型 [default 默认值];
注意,此处只能使用default设置默认值,不能用等号
必须遵循先定义后使用的原则。
局部变量与用户变量的不同:
命名格式不同:局部变量前面没有@
使用范围不同:局部变量只能在当前定义它的存储过程内部使用;而用户变量可以在当前的整个会话范围使用,包括存储过程。
用户变量不用事先定义,可以直接赋值使用,而且数据类型是随着赋予它的值而确定的。但局部变量必须先定义后使用,见下面的两个例子。
赋值方式不同,如下面。
分别使用set和select关键字为局部变量和用户变量赋值
首先要注意,为局部变量或用户变量赋值时,不能直接写成 变量名 = 值; 等号 运算符应该 配合set或 select 关键字一起使用。
局部变量的赋值:
set 局部变量名=值
set 局部变量名:=值
select值 into 局部变量名
注意:由于局部变量的局限性,所以为局部变量的赋值的这些语句只能在存储过程内部执行。
用户变量的赋值方式
文档评论(0)