1、存储过程
存储过程就是为以后使用而保存的一条或多条SQL语句。可将其视为皮文件,虽然他们的作用不仅限于批处理。
2、为什么要使用存储过程
- 通过把处理封装在一个易用的单元中,可以简化复杂的操作
- 由于不要求反复建立一系列处理步骤,因而保证了数据的一致性。如果所有开发人员和应用程序都使用同一存储过程,则所使用的代码时相同的。这一点的延伸就是防止错误,需要执行的步骤越多,出错的可能性就越大。
- 简化对变动的管理。如果表名,列名或业务逻辑有变化,那么只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。这点的延伸就是安全性。通过存储过程限制对基础数据的访问,减少了数据讹误的机会
- 因此存储过程通常以编译过的形式存储,所以DBMS处理命令所需的工作量少,提高了性能
- 存在一些只能用在单个请求中的SQL元素和特性,存储过程可以使用他们来编写功能更强更灵活的代码
换句话说,使用存储过程有三个主要的好处,即简单,安全,高性能
缺点:
- 不同DBMS中存储过程语法有所不同。事实上,编写真正的可移植存储过程几乎是不可能的。
- 一般来说,编写存储过程比编写基本SQL语句复杂,需要更高的技能,更丰富的经验。
3、执行存储过程
EXCUTE Addnewproduct ('JTS01',
'Stuffed Eiffel Tower',
6.49
'plush stuffed toy with the next la tour eiffel in red white and blue'
);
--这里执行一个名为addnewproduct的存储过程,将一个新产品添加到product表中。andnewproduct有四个参数,分别是:
供应商id(vendors表的主键),产品名,价格和描述。
4、创建存储过程
CREATE PROCEDUKE MailingListCount(
Listcount out integer
)
is
v_rows integer;
begin
select count(*) into v_rows
from customers
where not cust_email is null;
listcount :=v_rows;
end;
--这个存储过程有一个名为listcount的参数。此参数从存储过程返回一个值而不是传递一个值给存储过程。
关键字out用来指示这种行为。oracle支持in(传递值给存储过程),out(从存储过程返回值,如这里),
inout(既传递值给存储过程也从存储过程返回值)类型的参数。存储过程的代码再begin和end语句中,
这里执行一条简单的select语句,他检索具有游客地址的顾客。
然后用检索出的行数设置ListCount(要传递的输出类型)