• 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 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 ,Default_value(a.OWNER,a.Table_Name,a.column_name) as Data_default
          from
              dba_tab_columns A
          where
              A.owner=''SDU'' 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 ,Default_value(a.OWNER,a.Table_Name,a.column_name) as Data_default
          from
              dba_tab_columns A
           where
              A.owner=''BMP'' 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;
      
    begin
      compare_uc_tables;
    end;
    /
    select * from uc_table_different ;
  • 相关阅读:
    SQL 查询两个时间段是否有交集的情况 三种写法
    c# 时间区间求并集
    uniapp 身份证识别 微信 百度 图片前端压缩 图片后端压缩
    Git命令大全
    构建android studio项目
    如何查tomcat进程和杀死进程
    mysql 备份 还原不了
    解决git extensions每次要输入用户名和密码
    JS string 转 Byte64[]
    Git cmd
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/3298978.html
Copyright © 2020-2023  润新知