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

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

    sql
    • 01
    • 02
    • 03
    • 04
    • 05
    • 06
    • 07
    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表填充数据

    sql
    • 01
    • 02
    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连接

    • 01
    • 02
    • 03
    • 04
    • 05
    • 06
    • 07
    • 08
    • 09
    • 10
    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. 执行查询语句进行对比

    sql
    • 01
    • 02
    • 03
    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