zoukankan      html  css  js  c++  java
  • ORACLE比较两个数据库的表结构

    create table ESPACE_TABLE
    (
    TABLE_NAME VARCHAR2(100) not null
    )

    create table ESPACE_COLUMN
    (
    TABLE_NAME VARCHAR2(100) not null,
    COLUMN_NAME VARCHAR2(100) not null
    )

    create table UC_TABLE_DIFFERENT
    (
    S_TABLE_NAME VARCHAR2(30),
    B_TABLE_NAME VARCHAR2(30),
    S_COLUMN_NAME VARCHAR2(30),
    B_COLUMN_NAME VARCHAR2(30),
    S_DATA_TYPE VARCHAR2(106),
    B_DATA_TYPE VARCHAR2(106),
    S_DATA_LENGTH NUMBER,
    B_DATA_LENGTH NUMBER,
    S_DATA_PRECISION NUMBER,
    B_DATA_PRECISION NUMBER,
    S_DATA_SCALE NUMBER,
    B_DATA_SCALE NUMBER,
    S_NULLABLE VARCHAR2(1),
    B_NULLABLE VARCHAR2(1),
    S_DATA_DEFAULT VARCHAR2(4000),
    B_DATA_DEFAULT VARCHAR2(4000)
    )


    create table SDU_TABLES
    (
    TABLE_NAME VARCHAR2(30) not null,
    COLUMN_NAME VARCHAR2(30) not null,
    DATA_TYPE VARCHAR2(106),
    DATA_LENGTH NUMBER not null,
    DATA_PRECISION NUMBER,
    DATA_SCALE NUMBER,
    NULLABLE VARCHAR2(1),
    DATA_DEFAULT VARCHAR2(4000)
    )


    create table bmp_tables
    (
    TABLE_NAME VARCHAR2(30) not null,
    COLUMN_NAME VARCHAR2(30) not null,
    DATA_TYPE VARCHAR2(106),
    DATA_LENGTH NUMBER not null,
    DATA_PRECISION NUMBER,
    DATA_SCALE NUMBER,
    NULLABLE VARCHAR2(1),
    DATA_DEFAULT VARCHAR2(4000)
    )

    create table UC_TABLE_DIFFERENT
    (
    S_TABLE_NAME VARCHAR2(30),
    B_TABLE_NAME VARCHAR2(30),
    S_COLUMN_NAME VARCHAR2(30),
    B_COLUMN_NAME VARCHAR2(30),
    S_DATA_TYPE VARCHAR2(106),
    B_DATA_TYPE VARCHAR2(106),
    S_DATA_LENGTH NUMBER,
    B_DATA_LENGTH NUMBER,
    S_DATA_PRECISION NUMBER,
    B_DATA_PRECISION NUMBER,
    S_DATA_SCALE NUMBER,
    B_DATA_SCALE NUMBER,
    S_NULLABLE VARCHAR2(1),
    B_NULLABLE VARCHAR2(1),
    S_DATA_DEFAULT VARCHAR2(4000),
    B_DATA_DEFAULT VARCHAR2(4000)
    )


    CREATE OR REPLACE PROCEDURE COMPARE_UC_TABLES
    AS
    BEGIN

    execute immediate 'delete from sdu_tables';
    execute immediate 'delete from bmp_tables';
    execute immediate 'delete from uc_table_different';

    execute immediate 'insert into sdu_tables select
    A.Table_Name,
    A.column_name ,A.data_type ,A.data_length ,A.data_precision ,
    A.Data_Scale ,A.nullable ,''
    from
    dba_tab_columns A
    where
    A.owner=''表1'' and SUBSTR(TABLE_NAME,1,4) != ''BIN$''';
    execute immediate 'insert into bmp_tables select
    A.Table_Name,
    A.column_name ,A.data_type ,A.data_length ,A.data_precision ,
    A.Data_Scale ,A.nullable ,''
    from
    dba_tab_columns A
    where
    A.owner=''表2'' and SUBSTR(TABLE_NAME,1,4) != ''BIN$''';

    DELETE FROM sdu_tables WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM ESPACE_TABLE);
    DELETE FROM bmp_tables WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM ESPACE_TABLE);
    DELETE FROM sdu_tables S WHERE EXISTS (SELECT 1 FROM ESPACE_COLUMN E WHERE E.TABLE_NAME = S.TABLE_NAME AND E.COLUMN_NAME = S.COLUMN_NAME);
    DELETE FROM bmp_tables B WHERE EXISTS (SELECT 1 FROM ESPACE_COLUMN E WHERE E.TABLE_NAME = B.TABLE_NAME AND E.COLUMN_NAME = B.COLUMN_NAME);
    commit;

    execute immediate 'insert into uc_table_different select *
    from (select s.Table_Name s_Table_Name,
    b.Table_Name b_Table_Name,
    s.column_name s_column_name,
    b.column_name b_column_name,
    s.data_type s_data_type,
    b.data_type b_data_type,
    s.data_length s_data_length,
    b.data_length b_data_length,
    s.data_precision s_data_precision,
    b.data_precision b_data_precision,
    s.Data_Scale s_Data_Scale,
    b.Data_Scale b_Data_Scale,
    s.nullable s_nullable,
    b.nullable b_nullable,
    s.Data_default s_Data_default,
    b.Data_default b_Data_default
    from sdu_tables s
    full join bmp_tables b on s.Table_Name = b.Table_Name
    and s.column_name = b.column_name)
    where s_column_name is null
    or b_column_name is null
    or s_data_type != b_data_type
    or s_data_length != b_data_length
    or s_data_precision != b_data_precision
    or s_Data_Scale != b_Data_Scale
    or s_nullable != b_nullable
    or s_Data_default != b_Data_default';

    commit;

    END COMPARE_UC_TABLES;

    select * from uc_table_different where ((s_table_name not like 'TQH_%' AND B_table_name NOT LIKE 'TQH_%')
    AND (s_table_name not like 'TQBP_%' AND B_table_name NOT LIKE 'TQBP_%')
    AND (s_table_name not like 'TQSIMP_%' AND B_table_name NOT LIKE 'TQSIMP_%')
    AND (s_table_name not like 'TQSP_%' AND B_table_name NOT LIKE 'TQSP_%')
    AND (s_table_name not like 'TQTP_%' AND B_table_name NOT LIKE 'TQTP_%')
    AND (s_table_name not like 'TQP_%' AND B_table_name NOT LIKE 'TQP_%')
    AND (s_table_name not like 'TQPH_%' AND B_table_name NOT LIKE 'TQPH_%')
    AND (s_table_name not like 'TQPBP_%' AND B_table_name NOT LIKE 'TQPBP_%') ) OR
    ( s_table_name IS NULL AND B_table_name NOT LIKE 'TQH_%'
    AND B_table_name NOT LIKE 'TQBP_%' AND B_table_name NOT LIKE 'TQSIMP_%'
    AND B_table_name NOT LIKE 'TQSP_%'
    AND B_table_name NOT LIKE 'TQTP_%'
    AND B_table_name NOT LIKE 'TQP_%'
    AND B_table_name NOT LIKE 'TQPH_%'
    AND B_table_name NOT LIKE 'TQPBP_%'
    )

  • 相关阅读:
    常用地市
    UML 类图总结
    什么是线程和进程
    一切皆是对象
    反射、Attribute
    js 面试题
    委托
    使用NPOI导出Excel引发异常(IsReadOnly = “book.IsReadOnly”引发了类型“System.NotImplementedException”的异常)
    lambda表达式封装对数据库的查询
    lambda表达式Expression<Func<Person, bool>> 、Func<Person, bool>区别
  • 原文地址:https://www.cnblogs.com/dujinyang/p/4503508.html
Copyright © 2011-2022 走看看