Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1705658
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-11-28 21:16:25

语法

coalesce::=

功能

返回表达式 expr 中第一个非空的 expr 值。如果全部的 expr 都为 NULL,则函数 coalesce 返回 NULL。

它就像更普通的 NVL 函数。比如 NVL(a, b),如果 a 为 NULL,则返回 b。这使用 coalesce(a, b) 也可以实现同样的功能。

有时候,coalesce 函数可以替代 CASE 表达式。比如 coalesce(expr1, expr2) 和下面这个 CASE 表达式是等价的:

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
类似地,COALESCE (expr1, expr2, ..., exprn), for n>=3 和下面这个 CASE 表达式是等价的:
CASE WHEN expr1 IS NOT NULL THEN expr1 
ELSE COALESCE (expr2, ..., exprn) END

举例
SQL> select coalesce(null, null, 'yct', null) from dual;
 
COA
---
yct

所有的 expr 的类型必须相同。否则就会出错:


SQL> select coalesce(null, null, 'yct', null, 10) from dual;
select coalesce(null, null, 'yct', null, 10) from dual
                                         *
ERROR 位于第 1 行:
ORA-00932: 不一致的数据类型: 要求 CHAR 得到的却是 NUMBER

而 coalesce 返回值的类型是根据第一个不为空的 expr 来判断的,比如上面要求得到 CHAR 类型,而把 10 放在前面,就要求得到 NUMBER 类型了:

SQL> select coalesce(null, null, 10, null, 'yct') from dual;
select coalesce(null, null, 10, null, 'yct') from dual
                                      *
ERROR 位于第 1 行:
ORA-00932: 不一致的数据类型: 要求 NUMBER 得到的却是 CHAR
阅读(1594) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~