DECODE异常: ORA-01722: invalid number

  最近调试SQL语句,总是出现 ORA-01722: invalid number 错误,查了半天才发现是decode报错,仔细研究下Oracle官网上的资料,发现了以前没有注意过的细节,就此总结下。

  Oracle 官网Decode资料网址:http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm#i1017437

  DECODE语法,从DECODE(expr,if1,val1,if2,val2,...,ifn,valn,default),expr,ifn, default 可以为numeric 类型(NUMBER, BINARY_FLOAT, or BINARY_DOUBLE)或者character类型。

  注意事项1: expr与if1,if2...ifn 的数据类型要一致,如果不一致,Oracl会自动转换expr,if2...ifn为if1的类型,如果转换不成功就会报错。

例如:

SELECT DECODE('A',1,0,1) FROM DUAL;

执行结果:

注意事项2:  val2...valn和default应该与val1的类型一致,如果不一致,Oracle会自动转换val2...valn和default为val1类型,如果转换不成功就会报错。

SELECT DECODE('1','0',0,'X') FROM DUAL;

执行结果:

注意事项3:  对于DECODE函数,Oracle认为NULL与NULL是相等的。

SELECT DECODE(NULL,NULL,'SAME','NOT SAME') FROM DUAL;

执行结果:

 

 

 

 

 

 

posted @ 2012-12-25 20:50  书虫之梦  阅读(802)  评论(0编辑  收藏  举报