13.2 用户自定义函数 13.2.1 基本概念, d& L' Z1 U/ C4 n4 K! z
1、 用户定义函数可以扩展数据操作的功能,它在概念上类似于一般的程序设计语言中定义的函数。
! h+ K3 O9 h7 T' _ 13.2.2 创建和调用标量函数: B' ^+ b1 `% [; c" B0 _
标量函数—返回单个数据值的函数;2 j) R' ]% U6 T) N5 z
1、定义标量函数$ B& q' `2 L% E/ m( @! N
CREATE FUNCTION [拥有者名.] 函数名5 d9 a5 F, y. O+ k1 C
([{@ 参数名[AS]标量数据类型[=default]}[,…n]])2 z3 C i. Z5 ~6 R
RETURNS 返回值类型
; _3 s% o$ i! K: l# Z# A) M9 Q [AS]- R, J9 ]2 C9 @
BEGIN
2 c6 w. e' a* n& q 函数体
- F' Z1 G( Q# ?7 i2 {& F) J RETURN 标量表达式* K/ y" y' T4 d
END
1 s+ s% o# g9 z, U3 N' x (1) 同存储过程一样,函数的参数也可以有默认值。' p2 K @+ s1 ], }
(2) 标量表达式:指定标量函数返回的标量值。% E4 g/ j1 {7 p
2、 调用标量函数:
R; o/ g3 t, h 当调用标量函数时,必须提供至少由两部分组成的名称:函数拥有者名和函数名。可在任何允许出现表达式的SQL语句中调用标量函数,只要类型一致;. r1 y4 [. c( x4 d+ y
13.2.3 创建和调用内嵌表值函数
0 {% t" A6 t. G% a' G7 u& _3 T3 f) O 1、 创建内嵌表值函数,其语法为:
+ j; Y# u- j4 m; r. C! U' C CREATE FUNCTION [拥有者名.] 函数名3 C4 q4 g! u; k6 l' M' M
([{@ 参数名[AS]标量数据类型[=default]}[,…n]])
. n8 W( y& s- t RETURNS 返回变量 TABLE + S4 F! t5 c' J o6 g
[AS]
; J. {* C- j2 q$ }6 [" S" u BEGIN5 `7 M3 s8 z, ]' }! D8 q
函数体
9 ]. I V- F2 C& M0 U RETURN
1 @4 D! z! h& t8 r2 o4 [ END% o' M7 y9 z* S" a& F9 {3 `5 C# G' ]
::=({列定义|表约束}[,…n])! r7 i1 n5 d+ y6 R$ @2 |2 O" f) t
2、调用多语句表值函数5 i: M' I9 w! ]. F# i' }( N1 i
多语句表值函数的返回值是一个表,因此对多语句表值函数的使用也是放在SELECT语句的FROM子句中。7 J8 [" E' T3 b# x2 M* Z
13.3 触发器
* o- T' C# Q) R/ a2 J/ O- J [/ b 13.3.1 触发器基本概念) S: k1 W$ z0 i8 | Y
1、 触发器是一种特殊的存储过程,其特殊性在于它不需要由用户来调用,而是当用户对表中的数据进行UPDATE、INSERT或DELETE操作时自动触发执行;8 W1 z5 i- c) q
2、 触发器常用于下列场合:
! |5 Z0 o8 x) Y! C3 z" U (1) 完成比CHECK的约束更复杂的数据约束;
. \2 f9 B9 ?1 k1 _# W) n (2) 为保证数据库性能而维护的非规范化数据;
2 v3 g6 ^) S) K+ I) E (3) 实现复杂的业务规则,可使业务的处理任务自动进行。 |