重学MYSQL之使用存储过程

数据库 2020-09-11 1016

存储过程就是为以后使用而保存的一条或多条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条评论