数据迁移判断非空约束(r2笔记45天)

在数据迁移中,经常会碰到null值的问题,比如在源库中,某些列可能是null值,但是在目标库中,却有非空约束。这样在数据的迁移过程中就会发生问题。 为了更好的对数据的非空问题进行判断,我写了如下的脚本来生成检查的脚本,基本的思路就是生成动态sql,类似 select count(1) from xxx where xxx is null,如果输出结果不为0,说明在源库中存在着非空约束的问题。 脚本需要在目标库中生成,然后在源库执行即可,可以在执行的过程中,考虑加入并行等。 因为非空约束的条件在user_constraints中式long类型卡所以不能做字符串拼接等操作,就当做独立的一列来处理。 sqlplus -s n1/n1 <<EOF set linesize 150 set feedback off set pages 0 col search_pre format a58 col search_condition format a50 spool not_null_constraint_$1.sql_tmp select /*+rule*/ 'select count(1) from ' || table_name || ' where ' search_pre, search_condition, ';' from user_constraints where table_name =upper( '$1') and constraint_type = 'C' and constraint_name in (select constraint_name from user_cons_columns where table_name = upper('$1') and column_name in (select column_name from user_tab_cols where table_name =upper( '$1') and nullable = 'N')); spool off; EOF sed 's/ NOT / /g' not_null_constraint_$1.sql_tmp > not_null_constraint_$1.sql rm not_null_constraint_$1.sql_tmp exit 比如对于表T来说,object_id,object_name含有非空约束。 SQL> desc t Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER OBJECT_ID NOT NULL NUMBER OBJECT_NAME NOT NULL VARCHAR2(30) OBJECT_TYPE VARCHAR2(19) CLOB_TEST CLOB 运行脚本后,生成的sql脚本内容如下所示,达到了预期的目标。 select count(1) from T where "OBJECT_NAME" IS NULL ; select count(1) from T where "OBJECT_ID" IS NULL ;

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网开发者交流社区

Oracle-函数大全

1165
来自专栏芋道源码1024

数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 改写

本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. SQLToken 3.SQL 改写 3.4.1 分页补充 3.1 TableTo...

3366
来自专栏醉梦轩

Linux上C语言写的简易telnet客户端

972
来自专栏北京马哥教育

Mysql 架构和索引

字段类型选择 慷慨是不明智的 在相关的表中使用相同的数据类型,因为可能进行join 选择标示符:整数通常是最佳选择,尽量避免使用字符串 大致决定数据类型(数字,...

3199
来自专栏iOS122-移动混合开发研究院

Objection, 一个轻量级的Objective-C依赖注入框架

简介 项目主页:https://github.com/atomicobject/objection 实例下载: https://github.com/ios12...

2278
来自专栏LanceToBigData

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等。希望大家能都得到帮助! 在开始...

18310
来自专栏数据分析

[数据库基础]——索引

一、引言 对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮助。有不少存疑的地方,...

3227
来自专栏java达人

漫谈数据库索引

一、引言 对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮助。有不少存疑的地方,诚...

1729
来自专栏前端侠2.0

Per.js 的do.for进行响应式编程的疑问?

但在我测试响应功能时,发现Per.js的行为完全不正确。do.for修改后,循环不停的往页面插入元素。

211
来自专栏程序猿

SQL优化法则小记

SQL优化技巧 1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,...

3489

扫描关注云+社区