一,存储过程
1.1 定义
存储过程是一个预编译的语句集,存储在数据库中。它允许模块化设计,也就是说编译一次之后,永久有效。通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
1.2 作用
- 响应时间快,可以带来运行效率提高的好处
- 存储过程运行更加稳定,不会出现太多错误
- 存储过程主要是在服务器上运行,减少对客户机的压力
- 可以接受输入输出值,返回结果集以及返回值,用处灵活
1.3 优缺点
优势:
只需要创建一次,就可以重复的使用,减少了数据库人员的工作量;参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
缺点:
维护性较差,相对于简单的SQL语句,存储过程并没有什么优势,并且在进行调试时比较困难。
二,存储过程的创建和调用
- 无参:
--创建不带参数的存储过程
go
create proc cp_selectBooks --创建一个存储过程cp_selectBooks
as
select * from Books
--调用
exec cp_selectBooks
调用结果:
- 带输入参数:
--创建带参数的存储过程
go
create proc cp_selectBooks_ByName
(
@name nvarchar(50)
)
as
select * from Books where Name like '%'+@name+'%'
--调用
exec cp_selectBooks_ByName '建筑'
调用结果:
- 带输入,输出参数
--带输入,输出参数
--进行模糊查询,返回记录数还要返回记录
go
create proc cp_select_books
(
@name nvarchar(50),
@rowcount int out
)
as
select * from Books where Name like '%'+@name+'%'
select @rowcount=COUNT(*) from Books where Name like '%'+@name+'%'
--调用
go
--定义一个变量,接受返回值@rowcount
declare @rows int
exec cp_select_books '建筑',@rows out
print @rows
调用结果:
说明:
out表示返回值参数,类型可以使用任意Oracle中的合法类型。
@name表示输入参数
@rowcount表示输出参数
三,存储过程和函数的区别?
存储过程是用户定义的一系列SQL语句的集合,而函数通常是数据库已定义的方法,具体区别如下:
-
对于存储过程来说可以返回参数,而函数只能返回值或者表对象.
-
函数必须有返回值,存储过程可有可无
-
存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一部分来调用