• 博客访问: 605066
  • 博文数量: 136
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-07 18:53
  • 认证徽章:
个人简介

Dylan, Oracle ACE-A, 山东Oracle用户组(http://www.sdoug.com)创始人, 从事Oracle开发工作超过7年, 已获得OCM认证并评为Oracle用户组年轻专家(Young Expert Program)。

文章分类

全部博文(136)

文章存档

2016年(16)

2015年(53)

2014年(40)

2013年(27)

分类: Oracle

2016-12-09 23:27:13

Oracle Database 12c Release 2(12.2)包括对数据类型转换函数的许多增强,从而更容易处理转换错误。

创建测试表及初始化数据

本文中的示例所用的表:

CREATE TABLE t1 (
  data VARCHAR2(20)
);

INSERT INTO t1 VALUES ('11111');
INSERT INTO t1 VALUES ('01-JAN-2016');
INSERT INTO t1 VALUES ('AAAAA');
COMMIT;

CAST 和 TO_* 转换函数

在以前的数据库版本中,数据类型转换期间失败将导致错误。

SELECT TO_NUMBER(data) FROM   t1;
ERROR:
ORA-01722: invalid number

no rows selected

SQL>

在Oracle数据库12.2中,CAST函数和几个TO_*函数已修改为包括错误处理功能,允许它们在发生转换错误时返回默认值。

SELECT TO_NUMBER(data DEFAULT -1 ON CONVERSION ERROR)
FROM   t1;
                 *
TO_NUMBER(DATADEFAULT-1ONCONVERSIONERROR)
----------------------------------------
                                   11111
                                      -1
                                      -1

SQL>
SELECT TO_DATE(data DEFAULT '01-JAN-2000' ON CONVERSION ERROR, 'DD-MON-YYYY' )
FROM   t1;

TO_DATE(D
---------
01-JAN-00
01-JAN-16
01-JAN-00

SQL>
SELECT CAST(data AS TIMESTAMP DEFAULT NULL ON CONVERSION ERROR, 'DD-MON-YYYY')
FROM   t1;

CAST(DATAASTIMESTAMPDEFAULTNULLONCONVERSIONERROR,'DD-MON-YYYY')
-----------------------------------------------------------------
01-JAN-16 12.00.00.000000000 AM

SQL>

VALIDATE_CONVERSION 函数

VALIDATE_CONVERSION函数用于测试转换是否成功,从而可以排除在操作期间导致问题的数据。 如果转换成功,则函数返回值“1”,如果转换失败,则返回“0”。

SELECT data FROM   t1 WHERE  VALIDATE_CONVERSION(data AS NUMBER) = 1;

DATA
--------------------
11111

SQL>
SELECT data FROM   t1
WHERE  VALIDATE_CONVERSION(data AS DATE, 'DD-MON-YYYY') = 1;

DATA
--------------------
01-JAN-2016

SQL>


阅读(33) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册