存储过程就是为以后使用而保存的一条或多条SQL语句。可将其视为批文件,虽然它们的作用不仅限于批处理。
说明:SQLite,Access不支持存储过程
1.为什么使用存储过程?
- 通过把处理封装在一个易用的单元中,可以简化复杂的操作。
- 由于不要求反复建立一系列处理步骤,因而保证了数据的一致性。如果所有开发人员和应用程序都使用同一存储过程,则所使用的代码都是相同的。这一点的延伸就是为了防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性
- 简化对变动的管理。如果表名、列名或业务逻辑有变化,那么只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化
- 因为存储过程通常以编译过的形式存储,所以数据库处理命令所需的工作量少,提高了性能。
- 存在一些只能在单个请求中的SQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码。
2. 执行存储过程
执行存储过程远比编写要频繁得多,执行存储过程得SQL语句很简单,即EXECUTE。接受存储过程名和需要传递给它得任何参数。
EXECUTE AddNewProduct('JTS01', 'Stuffed Eiffel Tower', 6.49, 'Plush stuffed toy with the ...')
分析:
这里执行了一个名为AddNewProduct得存储过程,将一个新产品添加到Products表中。AddNewProduct有四个参数,分别为:供应商ID,产品名,价格和描述。这4个参数匹配存储过程中4个预期变量。此存储过程将新行添加到Products表,并将传入得属性赋给相应列。
以下是存储过程所完成得工作:
- 验证传递得数据,保证所有4个参数都有值
- 生成用作主键得唯一ID
- 将新产品插入Products表,在合适得列中存储生成得主键和传递的数据
对于具体的数据库,可能包括以下的执行选择:
- 参数可选,具有不提供参数时的默认值
- 不按次序给出参数,以"参数=值"的方式给出参数值
- 输出参数,允许存储过程在正执行的应用程序中更新所有参数
- 用SELECT语句检索数据
- 返回代码,允许存储过程返回一个值到正在执行的应用程序。
3.创建存储过程
例子:对邮件发送清单中具有邮件地址的顾客进行计数
以下是Oracle版本:
CREATE PROCEDURE 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(要传递的输出参数)。
调用Oracle例子:
var ReturnValue NUMBER EXEC MailingListCount(:ReturnValue);
SELECT ReturnValue;
分析:这段代码声明了一个变量来保存存储过程中返回的任何值,然后执行存储过程,再使用SELECT语句显示返回的值。
评论列表
已有0条评论