如何使用数据库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

本文来自云栖社区合作伙伴DBAplus

相关文章
|
4月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
5月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
617 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
5月前
|
安全 druid Nacos
0 代码改造实现应用运行时数据库密码无损轮转
本文探讨了敏感数据的安全风险及降低账密泄漏风险的策略。国家颁布的《网络安全二级等保2.0标准》强调了企业数据安全的重要性。文章介绍了Nacos作为配置中心在提升数据库访问安全性方面的应用,并结合阿里云KMS、Druid连接池和Spring Cloud Alibaba社区推出的数据源动态轮转方案。该方案实现了加密配置统一托管、帐密全托管、双层权限管控等功能,将帐密切换时间从数小时优化到一秒,显著提升了安全性和效率。未来,MSE Nacos和KMS将扩展至更多组件如NoSQL、MQ等,提供一站式安全服务,助力AI时代的应用安全。
370 14
|
5月前
|
SQL 数据建模 关系型数据库
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
773 4
|
6月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
8月前
|
人工智能 前端开发 JavaScript
代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践
通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。
|
4月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
342 6
|
10月前
|
存储 安全 API
陪玩平台中支付与结算模块的代码,陪玩系统数据库设计与代码实现
第三方支付平台对接涉及与微信支付、支付宝等API接口的调用,确保用户支付流程顺畅。结算模块根据业务规则计算陪玩师收益,强调安全性、异常处理、可扩展性和日志记录。数据库设计涵盖用户、陪玩者、订单等信息的存储管理,确保系统稳定运行。
281 12

热门文章

最新文章