如何使用数据库12.2简化数据验证代码?

无论你做了多少测试(嗯,它实际上是这样,但这是一个完全不同的问题),你几乎可以保证,在某些时刻,你那些漂亮的数据验证代码,在解析从Web表单输入的数据或从外部加载数据文件时,会弹出错误:

 



 

当然,这里真正令人讨厌的是,你不知道哪个列的值(假设你有多个数字列)。

 

在数据加载期间管理转换错误

 

怎么办? 当然,明智的是,在你的代码中添加大量的数据验证检查,以尝试捕获来自数据源的错误类型数据所到达的情况。很可能所有的附加验证检查将减慢插入数据的过程,但这不是一个很好的结果。

 

如果您的数据通过外部文件到达,那么您可以使用BADFILE子句捕获那些由于数据类型错误而无法加载的记录。 但是,如果插入语句的数据源是由ETL作业填充的中间表或来自网页表单的一系列值,又该怎么办?

 

如何在INSERT期间管理转换错误

Panic over - Database 12c版本2包含了对CAST和TO_xxx函数的重要更改,以管理最常见的数据转换错误。 如果存在转换错误,CAST函数现在可以返回用户指定的值。

 

例如,让我们在模式中构建一个简单的计划表:

 



并让我们插入一些数据,其中包括在我们尝试将值添加到目标表中时可能导致数据转换错误的值:

 



现在让我们试着将数据从我们的分期表插入到EMP表,看看会发生什么:

 



 

……毫不意外的,我得到了以下错误:

 



 

我可以用几种不同的方式来处理这种情况。首先,尝试并发现临时表中的哪些行和列会包含导致数据转换错误的值。为此,我将使用新的VALIDATE_CONVERSION()函数,该函数标识无法转换为所需数据类型的问题数据。如果给定的表达式可以转换为指定的数据类型,则返回1,否则返回0。

 



 

这将产生一个表,其中我可以轻松地选择数据转换将要成功(列值为1)和失败(列值为0)的行:

 

 

我可以使用此信息过滤临时表中的数据,因为我将其插入到我的EMP表或我可以使用INSERT INTO ... .. SELECT语句中增强的CAST和TO_xxx函数。

 

当发生数据类型转换错误时,CAST函数(以及TO_NUMBER,TO_BINARY_FLOAT,TO_BINARY_DOUBLE,TO_DATE,TO_TIMESTAMP,TO_TIMESTAMP_TZ,TO_DSINTERVAL和TO_YMINTERVAL函数)现在可以返回用户指定的值,而不是错误。这减少了数据转换和数据加载过程中的故障。

 

因此,我新的12.2版本验证SELECT语句如下所示:

 



 

这五行结果插入到我的EMP表中 - 显然这意味着在插入过程(行1,4,6和8)期间拒绝了第4行,因为它们包含将内容转换为empno键的一个数字错误。 这里是加载的数据:

 

 

我们可以看到在第1行,HIERDATE无效,所以它被替换为sys日期(07-JUL-16)的值。 第2行,DEPTNO的值是转换默认值99,而在第4行,MGR的值是转换默认值9999。

 

总结

 

增强的CAST函数(以及TO_NUMBER,TO_BINARY_FLOAT,TO_BINARY_DOUBLE,TO_DATE,TO_TIMESTAMP,TO_TIMESTAMP_TZ,TO_DSINTERVAL和TO_YMINTERVAL函数)可帮助您处理数据转换错误,而无需使用复杂的PL / SQL代码或在应用程序代码中写入数据验证例程。

 

新的VALIDATE_CONVERSION()函数可用于帮助您标识无法转换为所需数据类型的列值。

 

这两个功能都很有用。希望你会喜欢!

原文发布时间为:2017-03-24

时间: 2024-09-22 16:49:35

如何使用数据库12.2简化数据验证代码?的相关文章

《Excel 职场手册:260招菜鸟变达人》一第 12 招 数据验证引用序列不在同一行或同一列怎么办

第 12 招 数据验证引用序列不在同一行或同一列怎么办 进行数据验证时需要引用的序列多行多列怎么办呢?可以把多列变为一列,方法见第57招到第59招.本招另辟蹊径,通过定义名称的方法实现,解决思路:定义一列或一行数据名称→数据验证定义→修改定义的名称引用位置为多行多列.如果要引用的序列是多行多列,如图1-1-39所示,序列有3行2列,进行数据验证定义鼠标选中后会提示错误,如图1-1-40所示. 选中需要引用的B列,输入定义的名称:业务,再对A列做数据验证定义,如图1-1-41和图1-1-42所示.

EJB数据验证出现在什么地方最合适

我们将讨论数据验证逻辑应该出现在 EJB 应用程序代码的什么位置,而不是专注于验证过程(Java 技术专区的其它地方对此进行了很好的讨论).我们了解了很多组成基于 EJB 技术的应用程序的组件:底层会话 bean 及其业务接口:在实体 bean 及其客户机之间传送数据的值对象以及担任 Web 层和业务层之间的保护层的各种委派类.验证逻辑十分适合这些组件中的任何一个.实际上,您可以在多个组件中放置验证逻辑,在整个应用程序中分层次地放置它(尽管这样做是不可取的).因此,我们在此处提出的问题是:在 E

EJB最佳实践:数据验证出现在什么地方最合适

尽管数据验证是所有企业应用程序的必需组件,但人们对数据验证过程的理解通常很肤浅,并且不能很好地执行.在这篇 EJB 最佳实践专栏文章中,Brett McLaughlin 解释了对基于 EJB 技术的系统进行数据验证的一些幕后概念,并向您展示了如何避免意外的或不可理解的错误消息. 每当您处理应用程序的业务逻辑时,都需要执行验证.应用程序必须有办法确保传入的数据格式正确,并且必须能够执行特定于业务的验证(如针对库存复核采购订单). 我们将讨论数据验证逻辑应该出现在 EJB 应用程序代码的 什么位置,

如何使用JavaScript和正则表达式进行数据验证_正则表达式

数据验证是网络应用软件从客户端接受数据的重要步骤,毕竟,您需要在使用客户数据前确保其符合预期的格式.在网络应用程序中,您可以选择使用特定平台的工具,比如ASP.NET.JSP等等,或者您可以利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作. 正则表达式 正则表达式是一种模式匹配的工具,它允许您以文字方式来表述模式,因而正则表达式成为了一个验证文本数据的强大工具.除了模式匹配之外,正则表达式还可以用于文字替换.从我在UNIX系统上使用Perl时第一次接

如何使用JavaScript和正则表达式进行数据验证

数据验证是网络应用软件从客户端接受数据的重要步骤,毕竟,您需要在使用客户数据前确保其符合预期的格式.在网络应用程序中,您可以选择使用特定平台的工具,比如ASP.NET.JSP等等,或者您可以利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作. 正则表达式 正则表达式是一种模式匹配的工具,它允许您以文字方式来表述模式,因而正则表达式成为了一个验证文本数据的强大工具.除了模式匹配之外,正则表达式还可以用于文字替换.从我在UNIX系统上使用Perl时第一次接

数据验证 规则-根据规则验证数据库 数据验证问题

问题描述 根据规则验证数据库 数据验证问题 2C 根据规则验证数据库的数据的准确性和完整性,规则是可配置的.比如表A 字段1的值等于1,字段2的值等于1 时字段三根据前两个字段值必须为2. 还有一种情况假设表A有一个类型字段,当类型等于XX时表B必须要有一条关联的记录. 我只说了两种情况, 规则是不定的,可能有很多种情况. 该怎么实现,有没有人做过类似的东西. 没什么分了,忘大牛门不吝赐教 解决方案 简单的,可以用表达式解析,复杂的用脚本引擎,把规则表达式或者脚本代码存入 解决方案二: WPF数

《Excel高手捷径:一招鲜,吃遍天》一第12招 为单元格设置数据录入的范围——数据有效性(数据验证)

第12招 为单元格设置数据录入的范围--数据有效性(数据验证) Excel高手捷径:一招鲜,吃遍天数据有效性在Excel 2013版本的菜单中为"数据验证",是为特定单元格定义可以接受信息的范围的工具,这些信息可以是数值.序列.时间日期.文本等,也可以自定义.当输入单元格的信息不在可接受范围内,屏幕上就会出现出错信息提示的对话框,而其中的出错信息也是由自己来定义的.例如,用序列来定义单元格,打开"数据"菜单下选项"数据验证",设置有效性条件和输入

Zebra_Form v2.2发布 PHP类简化表单创建和数据验证

Zebra_Form是一个用于简化表单的创建和数据验证的PHP类. Zebra_Form 2.2修复了自定义表单验证的bug,修复了日期控件的验证bug以及PHP5生成输出信息的bug等. Zebra_Form 2.2发行说明: fixed a bug where, for custom validations, the http://www.aliyun.com/zixun/aggregation/33906.html">JavaScript function was not getti

MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证

原文:MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证 Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-server-side-validation.html  系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView 源码下