19.3 执行存储过程
存储过程的执行远比编写要频繁得多,因此我们先介绍存储过程的执行。执行存储过程的SQL语句很简单,即EXECUTE
。EXECUTE
接受存储过程名和需要传递给它的任何参数。请看下面的例子:
输入▼
EXECUTE AddNewProduct( 'JTS01',
'Stuffed Eiffel Tower',
6.49,
'Plush stuffed toy with the text La
➥Tour Eiffel in red white and blue' );
分析▼
这里执行一个名为AddNewProduct
的存储过程,将一个新产品添加到Products
表中。AddNewProduct
有四个参数,分别是:供应商ID(Vendors
表的主键)、产品名、价格和描述。这4个参数匹配存储过程中4个预期变量(定义为存储过程自身的组成部分)。此存储过程将新行添加到Products
表,并将传入的属性赋给相应的列。
我们注意到,在Products
表中还有另一个需要值的列prod_id
列,它是这个表的主键。为什么这个值不作为属性传递给存储过程?要保证恰当地生成此ID,最好是使生成此ID的过程自动化(而不是依赖于最终用户的输入)。这也是这个例子使用存储过程的原因。以下是存储过程所完成的工作:
- 验证传递的数据,保证所有4个参数都有值;
- 生成用作主键的唯一ID;
- 将新产品插入
Products
表,在合适的列中存储生成的主键和传递的数据。
这就是存储过程执行的基本形式。对于具体的DBMS,可能包括以下的执行选择:
- 参数可选,具有不提供参数时的默认值;
- 不按次序给出参数,以“参数=值”的方式给出参数值。
- 输出参数,允许存储过程在正执行的应用程序中更新所用的参数。
- 用
SELECT
语句检索数据。 - 返回代码,允许存储过程返回一个值到正在执行的应用程序。