数据迁移判断非空约束(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 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python

python分布式爬虫搜索引擎实战-4-scrapy框架初体验

基础环境 python3.5.3 pip install virtualenv pip install virtualenvwrapper-win 安装虚拟环...

3417
来自专栏何俊林

如何编译并使用x264库

x264是性能最好的H.264/AVC编码器,基于GNU GPL协议。FFmpeg可以使用x264作为编码库,能够提高编码性能。

935
来自专栏noteless

springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户Id',

1082
来自专栏专注数据中心高性能网络技术研发

解决Boost库链接出错问题

安装完最新的Boost库 官方说明中有一句话: Finally, $ ./b2 install will leave Boost binaries in the...

2403
来自专栏C# 编程

4 - SQL Server 2008 之 使用SQL语句删除表格

使用删除表格的SQL命令与删除数据的命令一样,只是删除的是表格这个对象, 语法如下:DROP TABLE 表名 一般在删除表格之前,需判断这个表格存不存在,存在...

1770
来自专栏pangguoming

C# 版dll 程序集合并工具

最近要开发一个控件给同事用,开发中会引用一些第三方DLL,这样交给用户很不方便,希望的效果是直接交付一个DLL文件。网上找了一些资料。  1.       使用...

3667
来自专栏木头编程 - moTzxx

ThinkPHP FTP图片上传

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

1203
来自专栏bboysoul

自己搭建ngrok服务把树莓派放到公网上去

为什么自己搭建ngrok服务呢?原因很简单,官方如果绑定域名要收费啊,自己有服务器,所以就自己搭建一个好了,要求的服务器配置又不高,说实在的树莓派IO真的惨不忍...

781
来自专栏Go 语言编程

TOML-to-Go : 帮你快速生成 Go 结构体

TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。

5867
来自专栏赵俊的Java专栏

自建 ngrok 内网穿透服务

8424

扫码关注云+社区