13.1 存储过程 13.1.1 存储过程基本概念4 V0 H3 S4 I8 ?& }0 K
1、 在关系数据库中,SQL语言是应用程序和数据库管理之间的主要编程接口;
3 U* e* a! ^2 ~9 K8 W& D+ A 2、 使用SQL语言编写代码时,可用两种方法存储和执行代码:
) _( {& \' H" \3 ` (1) 在客户端存储代码,并创建向数据库管理系统发送SQL命令,并处理返回结果的应用程序;" t$ t5 ]5 G9 G6 b& E
(2) 将这些发送的SQL语句存储在数据库管理系统中,这些存储在数据库管理系统中的SQL语句就是存储过程,然后再创建执行存储过程并处理返回结果的应用程序。
5 b N* X- {2 a" z5 ^, w6 \ 3、 使用存储过程的好处:
; b1 N: h( V# T) | (1) 模块化程序设计:只需创建一次存储过程并将其存储在数据库中,以后就可以在应用程序中多次调用存储过程;
1 ` ~) \* G7 d (2) 提高性能:系统在创建存储过程时对其进行分析和优化,并在第一次执行时进行语法检查和编译,编译好的代码放入内存中,以后再执行此存储过程时,只需直接执行内存中的代码,从而提高代码的执行效率;3 s0 a5 A g# Y6 G
(3) 减少网络流量:一个需要数百行SQL代码完成的操作现在只需一条执行存储过程的代码即可实现,因此,不再需要在网络中发送这些多语句;' f( X2 y- z& e6 i/ m3 z. k
(4) 可作为安全机制使用:6 q% z* t o' i; ]
13.1.2 创建和执行存储过程
% B# `; z V% t7 f2 z 1、 创建存储过程的SQL语句为:CREATE PROCEDURE,语法格式为:2 s, P2 q E& J" U4 }
CREATE PROCEDURE 存储过程名
5 w% C4 l4 K! J( ]8 B4 p [{@ 参数名 数据类型}[=default][OUTPUT]! N" p5 N+ l- e0 p2 ~$ U& b$ l
][,…n]
8 W6 R0 y- n8 e) D8 N0 p AS* m! C O) ~. o' m
SQL语句[…n]: @! U+ V M2 R: q5 V, d
其中:
- ~. ?" E: @+ }% ?& X$ u (1) default:表示参数的默认值。如果定义了默认值,则在执行存储过程时,可以不必指定该参数的值,默认值必须是常量或NULL;! P/ |. e6 U! [+ P6 V/ }, K1 R. `
(2) OUTPUT:表明参数是输出参数,该选项的值可以返回给存储过程的调用者。
( g; S5 U" H/ J' i( W. d9 l 2、执行存储过程的SQL语句是EXECUTE,语法格式:6 s% ^% x! Q( J# T" s* x
CREATE EXECUTE 存储过程名 [实参[,OUTPUT][,…n]]
- }& v; K2 e. C 1、 执行有多个输入参数的存储过程时,参数的传递方式有两种:7 e) f0 }4 l: C& \, t- p; t- j; N
(1) 按参数位置传递值:指执行存储过程的EXEC语句中的实参的排列顺序必须与定义存储过程时定义的参数的顺序一致;5 @' T6 C! i5 c6 G- x
(2) 按参数名传递值:指执行存储过程的EXEC语句中要指明定义存储过程时指定的参数的名字以及此参数的值,而不关心参数的定义顺序。! G/ u7 I3 l4 M3 J) w7 ]: }0 i
2、 注意:
! |9 g8 I$ `7 z5 ^1 }6 q (1) 在执行有输出参数的存储过程时,执行语句中的变量名的后边要加上OUTPUT修饰符;; L0 V9 P2 k- O$ C
(2) 在调用有输出参数的存储过程时,与输出参数对应的是一个变量,此变量用于保存输出参数返回的结果; |