使用minus对比两个数据库表列是否一致

  1. 在两个数据库分别建立一个表用来存放该数据库所有表字段数据

    create table ALL_TABLE_COLUMN_NAME
    (
      table_name  VARCHAR2(100),
      column_name VARCHAR2(100),
      data_type   VARCHAR2(100),
      data_length VARCHAR2(100)
    )
    
  2. 为两个数据中ALL_TABLE_COLUMN_NAME表填充数据

    INSERT INTO all_table_column_name(TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH) 
    select TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH from user_tab_columns;
    
  3. 创建dblink连接

      CREATE PUBLIC DATABASE LINK "DATABASE_LINK_NAME"
       CONNECT TO "account" IDENTIFIED BY VALUES 'password'
       USING '(DESCRIPTION =
             (ADDRESS_LIST =
             (ADDRESS = (PROTOCOL = TCP)(HOST = IP)(PORT = 1521))
             )
             (CONNECT_DATA =
             (SERVICE_NAME = orcl)
             )
     )';
    
  4. 执行查询语句进行对比

    select TABLE_NAME,COLUMN_NAME from all_table_column_name
    minus 
    select TABLE_NAME,COLUMN_NAME from all_table_column_name@DATABASE_LINK_NAME;
    

    minus指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃。简单的说就是以第一个查询的结果为基础对比第二个查询的结果,只记录第二个查询结果中缺少第一个查询的结果,不记录第二条查询结果比第一个查询。例:ABC--CDE=AB,CDE--ABC=DE