什么是存储过程?
是一组为了完成特定功能的SQL语句集。经过编译存储在数据库中。 存储过程包括程序流,逻辑以及对数据库的查询。可以接受参数,输出参数,返回单个或多个结果集以及返回值
为什么使用存储过程?
存储过程种类:
*用户自定义存储过程
*系统存储过程
*扩展存储过程
存储过程好处:
1.增强SQL语言的功能和灵活性
2.良好的封装性
3.减少网络流量
4.高性能
5.作为安全机制保护数据库的安全性和数据完整性
创建存储过程:
语法格式:
Create proc[edure]procedure_name[;number]
[{@parameter data_type}
[VARYING][=DEFAULT][OUTPUT][,…N]
[WITH
{RECOMPILE(不缓存执行计划)|ENCRYPTION(对文档进行加密)|RECOMPILE,ENCRYPTION}]
AS
Sql_statement[…n]
]
使用带默认值的参数:
使用输出函数:
Output 获取储存过程的返回结果
存储过程实例:
实现过程复杂的工程
修改存储实例:右键--修改命令(会有格式)
ALTER PROCEFUCE procedure_name[;number](修改存储过程名称)
[{@parameter data_type}
[VARYING][=default][output](参数列表)
[,…n]
[WITH
{RECOMPILE | ENCRYPTION |RECIMPILE,ENCRYPTION}](属性)
[FOR REPLICATION]
AS
Sql_atatement[,…n]
删除存储过程:
两种方式:
T -SQL
语法格式:DROP PROCEDURE{procedure}[,…n]
命令菜单手动
点击存储过程-删除命令弹出删除对象窗口-删除
设计存储过程的规则:
1.可以引用在同一存储过程中创建的对象,只要引用时创建即可
2.在存储过程中引用临时表,在存储过程创建临时表,只为改存储过程存在,退出了存储过程,则临时表消失
3.在调用存储过程时,被调用的额存储过程课访问第一个存储过程的对象,包含临时表
4.不能回滚对执行远程MSQLSever2008进行更改的存储过程,不参与事务处理
5.参数最大数目为2100
6.局部变量的最大数目受内存限制
7.存储过最大为128MB
注意事项:
系统存储过程:
使用存储过程:
Exec sp_who sa
Exec sp_helpdb +数据库 如果不加就会加载出所有的
Exec sp_monitor 会显示统计信息
临时存储过程:
和创建临时表一样
#本地临时
##全局临时
嵌套存储过程:
查看存储过程:
Exec sp_helptext + 名称
扩展:存储过程体
1.局部变量:用来存储存储过程体中的临时结果DECLARE
局部变量注意事项:只能在存储过程体的BEGIN…END 语句块声明
在过程体的开头处声明
局部变量没有@符号 用户变量使用1个@符号 系统变量2个@符号
2.SET语句 为局部变量赋值
3.select…INTO 返回的结果集只能有一条
4.流程控制语句:
条件判断:IF …THEN …ELSE 和CASE
循环语句:LOOP REPEAT WHILE
扩展MYSQL:存储函数
与存储过程的区别:
存储函数不能拥有输出参数,本身就是输出参数,存储过程可以拥有输出参数;
直接对存储函数调用不需要使用CALL 语句,存储过程使用CALL语句;
存储函数
包含一条RETURN语句,存储过程没有
创建存储函数:
CREATE FUNCTION sp_name ([func_paraneter[,…]])
RETURNS type
Routine_body
调用存储函数:
SELECT sp_name ([func_paraneter[,…]])
删除存储函数:
DROP FUNCTION(IF EXISTS) sp_name