$L V"G1]gxS-F0
x:rZ1q-z
@051Testing软件测试网.x~;n*he 51Testing软件测试网PY7X&K*Zm7g_
51Testing软件测试网1v6N)CR!bQ2`O'C D网络收集
$KLAJg9{0Oracle函数(第一讲)
51Testing软件测试网7V$K%dK(gQ oq5p;J,`A/k051Testing软件测试网I1Z.Zc'tN(ba4PPL/SQL单行函数和组函数详解
nJ~S+V-X9~q#rH0i[v}j'B\/f#q]z0 函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:
5F)D]W{
a051Testing软件测试网(n
rgp1{P'WvJ` 单行函数
$`Fj]S#hl]0.\%x5o&{M M0 组函数51Testing软件测试网"Q#O\.wz'Et"N/I
#r6t}F3o6]fl0 本文将讨论如何利用单行函数以及使用规则。51Testing软件测试网+I$M]1QrdN2Y9\T7i [
51Testing软件测试网Blm6V.}
\8e+e51Testing软件测试网L-YQ0c_ dH
SQL中的单行函数51Testing软件测试网U'y
DQ#R~}
3cN*x$B|Rm3~0t6le0 SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。
,b-@1QSd?0SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM empWhere UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename)51Testing软件测试网Jp)M
X @#pj
51Testing软件测试网7g)G[+X:|g!v 单行函数也可以在其他语句中使用,如update的SET子句,INSERT的VALUES子句,DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数,所以我们的注意力也集中在SELECT语句中。51Testing软件测试网(s6u`d5f6r)G9V5Z?;_
51Testing软件测试网&^G"cL2b(NX0biM
[SA%{Lh&\l$fco0 NULL和单行函数51Testing软件测试网O1f5g{9RE8iS
r"_ Gq I*^0 在如何理解NULL上开始是很困难的,就算是一个很有经验的人依然对此感到困惑。NULL值表示一个未知数据或者一个空值,算术操作符的任何一个操作数为NULL值,结果均为提个NULL值,这个规则也适合很多函数,只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。在这些中NVL函数时最重要的,因为他能直接处理NULL值,NVL有两个参数:NVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则返回x1。51Testing软件测试网w8~!t&L|rKV
0@ w!a K:M9hlcD7l0 下面我们看看emp数据表它包含了薪水、奖金两项,需要计算总的补偿51Testing软件测试网!b{d
|~,cE,}*^
column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2
Z0K%p2FG051Testing软件测试网"]xekA}k(P 不是简单的将薪水和奖金加起来就可以了,如果某一行是null值那么结果就将是null,比如下面的例子:
"f^M9[_b0update empset salary=(salary+bonus)*1.151Testing软件测试网'm\2K1Ve?r/V
x9@4\(m-R%e+mX)P0 这个语句中,雇员的工资和奖金都将更新为一个新的值,但是如果没有奖金,即 salary + null,那么就会得出错误的结论,这个时候就要使用nvl函数来排除null值的影响。
k:mNb6C4}M051Testing软件测试网 MV
N q FA4M所以正确的语句是:
1AX"J5Ax$u-} S,v^0update empset salary=(salary+nvl(bonus,0)*1.1
.D2ne8UT0^~ u051Testing软件测试网wBZ2xLBu+u
m5LZj"y0