zoukankan      html  css  js  c++  java
  • 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);
    
  • 相关阅读:
    数据结构之 移位操作
    大话设计模式之外观模式
    JSP的内置对象(application)
    从键盘输入一个整数(1~20) 则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。
    linux线程应用
    【网络挖掘:成就与未来方向】之网络挖掘应用程序与相关概念
    Thinking in Java之匿名内部类
    [Go] map
    [跟着hsp步步学习系统]oracle培训学习集锦全360度扫描(2)
    HDU3791:二叉搜索树
  • 原文地址:https://www.cnblogs.com/kramer/p/3010652.html
Copyright © 2011-2022 走看看