13.2 用户自定义函数
) ~$ g) D2 H, s' |- c13.2.1 基本概念2 m# f6 T4 z5 W# z5 p8 d( s+ U8 ]7 M J
1、 用户定义函数可以扩展数据操作的功能,它在概念上类似于一般的程序设计语言中定义的函数。3 R; w; Y K, U
13.2.2 创建和调用标量函数3 R+ f7 `+ c" z; T+ p$ l
标量函数—返回单个数据值的函数;8 p+ O- `, x! g
1、定义标量函数
% \, V% n- ]6 t. |& QCREATE FUNCTION [拥有者名。] 函数名9 X. k# q2 o0 f8 M$ {
([{@ 参数名[AS]标量数据类型[=default]}[,…n]])4 [' i, _! q$ r4 J6 E! X
RETURNS 返回值类型
& T3 C: x' V1 C& g; \: p[AS]
- _( {, [) K7 n6 ^7 ^: U& LBEGIN- |* I$ i. P/ u4 a# \) v
函数体* c" R6 ]& r0 P% L
RETURN 标量表达式 r% n' x/ F: [
END
6 D2 `6 |/ W9 |" g& ?(1) 同存储过程一样,函数的参数也可以有默认值。8 w' z) o4 v3 p# h7 B4 N/ s
(2) 标量表达式:指定标量函数返回的标量值。4 F' R9 k3 \# c
2、 调用标量函数: B( m3 [* p a$ {, g0 p
当调用标量函数时,必须提供至少由两部分组成的名称:函数拥有者名和函数名。可在任何允许出现表达式的SQL语句中调用标量函数,只要类型一致;
" H7 [. ~$ L+ A2 Z/ Q2 y0 A13.2.3 创建和调用内嵌表值函数: b& l; ^& R O0 s3 O
1、 创建内嵌表值函数,其语法为: k' W2 c5 o+ q
CREATE FUNCTION [拥有者名。] 函数名) P. ^# V! x; J( F0 ~, J6 C, ?
([{@ 参数名[AS]标量数据类型[=default]}[,…n]]). l. L! R6 G- P6 a; t
RETURNS 返回变量 TABLE 《表定义》9 a# [8 E# N) R3 H& U1 K
[AS], M @1 D3 s& F( Z
BEGIN& \" V# w( l9 b( z( l: ?% f/ }0 Q- I
函数体
- Y; ]0 q. V0 j" r+ X5 |0 VRETURN. g8 z" I" v6 |! A; Q* q% D% }
END
& F2 z- r0 I" F F( E" r4 C《表定义》::=({列定义|表约束}[,…n])
, ]9 E; L5 q* G5 |6 H2、调用多语句表值函数& b/ ~$ H0 T8 K9 C7 g
多语句表值函数的返回值是一个表,因此对多语句表值函数的使用也是放在SELECT语句的FROM子句中。& N! y1 g `% @( ], h
13.3 触发器7 B# Z3 J0 s& ^& h. u
13.3.1 触发器基本概念. b7 i/ V5 m1 n
1、 触发器是一种特殊的存储过程,其特殊性在于它不需要由用户来调用,而是当用户对表中的数据进行UPDATE、INSERT或DELETE操作时自动触发执行;
/ _& E z/ I, ^& |2、 触发器常用于下列场合:
/ A+ e7 x" z- i6 M; z(1) 完成比CHECK的约束更复杂的数据约束;
! j' D+ O/ n. ]8 d" C(2) 为保证数据库性能而维护的非规范化数据;
. [9 o7 B t" G: `. g(3) 实现复杂的业务规则,可使业务的处理任务自动进行。 |