• python 导数据脚本


    背景:测试环境有表若干,产品环境有表若干。客户发信要求把产品环境数据同步到测试环境并提供了需要同步的table list。

    问题:该list可能有如下问题

    • list中的表存在重复
    • list中的表在测试环境不存在
    • list中的表缺少依赖关系,比如parent表不在list中。

    解决上述问题:

    list中的表在测试环境不存在的问题:

    我们先根据客户提供的list,也就是rawlist创建一个外部表

    create directory my_dir as '/tmp';
    create table raw_list_tab(owner varchar2(40),table_name varchar2(80)) organization external ( type oracle_loader default directory my_dir access parameters( records delimited by newline fields terminated by '.' missing field values are null (owner,table_name))location('rawlist')  );
    

    然后用SQL检测是否存在重复项

    SELECT TABLE_NAME FROM (SELECT TABLE_NAME,COUNT(*) COUNT FROM RAW_LIST_TAB    GROUP BY TABLE_NAME) V1 WHERE V1.COUNT>1;
    

    检测list中的所有entry是否在DB中都存在

    SELECT TABLE_NAME FROM RAW_LIST_TAB WHERE TABLE_NAME NOT IN (SELECT TABLE_NAME FROM DBA_TABLES WHERE RAW_LIST_TAB.OWNER=DBA_TABLES.OWNER);
    

    检测是否list中所有表的child 都存在

    先创建一个试图 check_child 该视图结构如下
    SQL> desc check_child
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     OWNER                                     NOT NULL VARCHAR2(30)
     TABLE_NAME                                NOT NULL VARCHAR2(30)
     P_OWNER                                   NOT NULL VARCHAR2(30)
     P_TABLE_NAME                              NOT NULL VARCHAR2(30)
    owner 和 table_name是child的owner和name。 p_owner和p_table_name则是parent的owner 和 name。
    创建语句如下
    select a.owner,a.table_name,b.owner as p_owner, b.table_name as p_table_name from dba_constraints a ,(select b.owner,b.table_name,b.constraint_name from RAW_LIST_TAB a ,dba_constraints b where a.owner=b.owner and a.TABLE_NAME=b.TABLE_NAME and b.CONSTRAINT_TYPE='P') b where a.r_owner = b.owner and a.R_CONSTRAINT_NAME=b.constraint_name order by p_table_name ;
    
    根据该视图结合下面语句可以查出哪些child不在列表中。
    SELECT A.OWNER,A.TABLE_NAME FROM  check_child A WHERE A.TABLE_NAME NOT IN (SELECT TABLE_NAME FROM RAW_LIST_TAB WHERE A.OWNER=RAW_LIST_TAB.OWNER);
    
  • 相关阅读:
    JSOI2015 R3 退队滚粗了
    bzoj3774
    bzoj1426
    bzoj3294
    java 位向量
    java 移位操作
    java 枚举类型的使用
    mysql 修改 root 用户密码
    几种数据库连接池的比较
    linux python 安装 pip出现 No module named 'setuptools'
  • 原文地址:https://www.cnblogs.com/kramer/p/3010652.html
Copyright © 2020-2023  润新知