zoukankan      html  css  js  c++  java
  • ORACLE数据库对比表结构

    有时候会有某种需求:需要对比两个表的表结构是否一致,有时候甚至是整个数据库所有表的表结构对比......。表结构对比无非就是字段名、字段类型、字段数据类型、以及字段的顺序的对比。如果需要对比表结构,可以通过下面简单的脚本实现:

    SELECT M.OWNER
          ,M.TABLE_NAME
          ,M.COLUMN_ID
          ,M.COLUMN_NAME
          ,M.DATA_TYPE
          ,M.DATA_LENGTH
          ,N.OWNER
          ,N.TABLE_NAME
          ,N.COLUMN_ID
          ,N.COLUMN_NAME
          ,N.DATA_TYPE
          ,N.DATA_LENGTH
    FROM
    (
    SELECT OWNER
          ,TABLE_NAME
          ,COLUMN_ID
          ,COLUMN_NAME
          ,DATA_TYPE
          ,DATA_LENGTH
    FROM DBA_TAB_COLUMNS
    WHERE OWNER=&OWNER_A
      AND TABLE_NAME=&TABLE_NAME_A
    ) M LEFT JOIN
    (
    SELECT OWNER
          ,TABLE_NAME
          ,COLUMN_ID
          ,COLUMN_NAME
          ,DATA_TYPE
          ,DATA_LENGTH
    FROM DBA_TAB_COLUMNS
    WHERE OWNER=&OWNER_B
      AND TABLE_NAME=&TABLE_NAME_B
    ) N ON  M.COLUMN_ID =N.COLUMN_ID
        AND M.COLUMN_NAME = N.COLUMN_NAME 
        AND M.DATA_TYPE = N.DATA_TYPE 
        AND M.DATA_LENGTH= N.DATA_LENGTH
    ORDER BY M.TABLE_NAME, M.COLUMN_ID;


    但是如果A表与B表前面的字段一致,然而B表有一些额外的字段,那么上面的SQL(左连接)就会查不出两者之间结构的不同。此时需要使用右连接才能对比出真正的表结构。所以如果需要对比两者的表结构是否一致,最好左连接查一次,右连接查一次。才能真正的确认两者的表结构的异同。

    SELECT M.OWNER
          ,M.TABLE_NAME
          ,M.COLUMN_ID
          ,M.COLUMN_NAME
          ,M.DATA_TYPE
          ,M.DATA_LENGTH
          ,N.OWNER
          ,N.TABLE_NAME
          ,N.COLUMN_ID
          ,N.COLUMN_NAME
          ,N.DATA_TYPE
          ,N.DATA_LENGTH
    FROM
    (
    SELECT OWNER
          ,TABLE_NAME
          ,COLUMN_ID
          ,COLUMN_NAME
          ,DATA_TYPE
          ,DATA_LENGTH
    FROM DBA_TAB_COLUMNS
    WHERE OWNER=&OWNER_A
      AND TABLE_NAME=&TABLE_NAME_A
    ) M RIGHT JOIN
    (
    SELECT OWNER
          ,TABLE_NAME
          ,COLUMN_ID
          ,COLUMN_NAME
          ,DATA_TYPE
          ,DATA_LENGTH
    FROM DBA_TAB_COLUMNS
    WHERE OWNER=&OWNER_B
      AND TABLE_NAME=&TABLE_NAME_B
    ) N ON  M.COLUMN_ID =N.COLUMN_ID
        AND M.COLUMN_NAME = N.COLUMN_NAME 
        AND M.DATA_TYPE = N.DATA_TYPE 
        AND M.DATA_LENGTH= N.DATA_LENGTH
    ORDER BY M.TABLE_NAME, M.COLUMN_ID;

  • 相关阅读:
    数据结构与算法
    c++学习笔记
    红黑树(map与unorder_map)B B+树
    数据库笔记
    多路复用IO:select poll epoll
    https加密过程!!! 这才是差不多非常详细的https双方获取共用的秘钥过程!!!!!
    助教周报(第一轮)——范青青
    第二十二周助教总结(2021.6.28-7.4)
    第二十一周助教总结(2021.6.21-6.27)
    第二十周助教总结(2021.6.14-6.20)
  • 原文地址:https://www.cnblogs.com/kerrycode/p/4664094.html
Copyright © 2011-2022 走看看