数据迁移判断非空约束

简介: 在数据迁移中,经常会碰到null值的问题,比如在源库中,某些列可能是null值,但是在目标库中,却有非空约束。这样在数据的迁移过程中就会发生问题。 为了更好的对数据的非空问题进行判断,我写了如下的脚本来生成检查的脚本,基本的思路就是生成动态sql,类似 select count(1) from xxx where xxx is null,如果输出结果不为0,说明在源库中存在着非空约束的问题。
在数据迁移中,经常会碰到null值的问题,比如在源库中,某些列可能是null值,但是在目标库中,却有非空约束。这样在数据的迁移过程中就会发生问题。
为了更好的对数据的非空问题进行判断,我写了如下的脚本来生成检查的脚本,基本的思路就是生成动态sql,类似 select count(1) from xxx where xxx is null,如果输出结果不为0,说明在源库中存在着非空约束的问题。

脚本需要在目标库中生成,然后在源库执行即可,可以在执行的过程中,考虑加入并行等。
因为非空约束的条件在user_constraints中式long类型卡所以不能做字符串拼接等操作,就当做独立的一列来处理。

sqlplus -s n1/n1  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                            ;                                       

目录
相关文章
|
28天前
|
关系型数据库 MySQL
非空约束:not null
非空约束:not null。
16 5
|
2月前
|
SQL
Sql语法:字段不为空
Sql语法:字段不为空
|
3月前
|
存储 关系型数据库 MySQL
MySQL约束 【主键约束丨唯一约束丨非空约束丨外键级联】
MySQL约束 【主键约束丨唯一约束丨非空约束丨外键级联】
55 0
|
4月前
|
存储 关系型数据库 MySQL
⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
47 0
|
10月前
|
SQL 关系型数据库 MySQL
列的完整性约束——设置表字段的非空约束(NOT NULL, NK)
列的完整性约束——设置表字段的非空约束(NOT NULL, NK)
|
11月前
|
关系型数据库 MySQL
MySQL语法查找非空(NULL)的元素
# 不会报错,但不会有可用数据返回 select name from clase where address != null
90 0
|
前端开发 关系型数据库 MySQL
【MySQL知识点】默认约束、非空约束
为了防止数据表中插入错误的数据,MySQL定义了一些维护数据库完整性的规则,即表的约束。常见的约束分为默认约束、非空约束、唯一约束、主键约束、外键约束。本期主要学习默认约束、非空约束~
328 0
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
759 0
|
存储 SQL 数据可视化
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
459 2
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
|
关系型数据库 MySQL 索引
【MySQL8.0学习笔记】约束:主键约束、自增长约束、非空约束、唯一性约束、默认约束与零填充约束
文章目录 1 MySQL约束简介 2 主键约束 2.1 主键约束的操作 2.1.1 添加单列主键 2.1.2 添加多列联合主键 2.1.3 通过修改表结构的方式添加主键 2.1.4 删除主键 3 自增长约束 3.1 指定自增长字段的初始值 3.1.1 delete和truncate在删除后自增列的变化 4 非空约束 5 唯一约束 6 默认约束 7 零填充约束(zerofill)