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_%'
)

ORACLE比较两个数据库的表结构的更多相关文章

  1. 使用Python比较MySQL数据库中两个数据库的表结构--转载

    https://blog.csdn.net/tenaguan4461/article/details/82286781 https://www.jianshu.com/p/b3dac5a3479a

  2. 在Oracle 11.2的数据库中建表时遇到 RESULT_CACHE (MODE DEFAULT) ORA-00922: missing or invalid option

    在Oracle 11.2的数据库中建表时遇到 RESULT_CACHE (MODE DEFAULT)  ORA-00922: missing or invalid option hostdr:[/ho ...

  3. MySQL 对比数据库的表结构

    有时候,需要对比一下测试环境和生产环境中,数据库的表结构是否有所差异.有两个常用的工具. AmpNmp.DatabaseCompare GUI 界面,支持多种数据库(MySQL.SQL Server. ...

  4. 通过EA导入数据库存在表结构并生成文档

    通过EA导入数据库存在表结构并生成文档   慕课网,程序员升职加薪神器,点击免费学习 目录[-] 导入数据源,表结构 生成表结构的文档 Enterprise Architect 是超级强大项目管理功能 ...

  5. 导入导出Mysql数据库、表结构、表数据

    由sql文件导入 mysql -uusername -ppwd < ./abc.sql 导出整个数据库的表结构 mysqldump -uroot -pdbpasswd -d dbname > ...

  6. 07_MySQL修改数据库的表结构

    修改数据库的表结构

  7. ORACLE数据库对比表结构

    有时候会有某种需求:需要对比两个表的表结构是否一致,有时候甚至是整个数据库所有表的表结构对比.......表结构对比无非就是字段名.字段类型.字段数据类型.以及字段的顺序的对比.如果需要对比表结构,可 ...

  8. 导出db2数据库的表结构和数据(转载)

      对于db2数据库,导入和导出表结构和数据其实很简单,只需要用到db2look和db2move两个命令即可.这两个命令都需要在客户端的命令行处理器 中执行,但对于数据库服务器和客户端不在同一机器上的 ...

  9. 【Oracle】【2】复制表结构及其数据

    --复制表结构及其数据 create table table_name_new as select * from table_name_old; --只复制表结构 ; --create table t ...

随机推荐

  1. django examples 学习笔记(1)创建一个独立的python环境

    pip install virtualenv   创建一个虚拟环境 virtualenv   my_env      创建一个独立的环境 source my_env/bin/activate   激活 ...

  2. js中Function方法

    function.apply(thisArg,argArray) apply方法调用function,传递一个会绑定到this上的对象和一个可选的数组作为参数. apply方法被用在apply调用模式 ...

  3. C++知识点总结(三)

    1.字符串查找字符函数strchr strchr函数原型:extern char*strchr(const char *s,char c); 功能:查找字符数组s中首次出现字符c的位置 说明:返回首次 ...

  4. BSGS(大小步)算法

    BSGS算法主要用于求解形如ax≡b(mod p)的式子中x的值. 在这里我们不妨设 x=k1*n-k2 这时我们就可以将式子转化为 ak1*n≡b*ak2(mod p) 这里的n我们设为√p,所以我 ...

  5. eos命令

    ps -ef|grep javakill -9 端口号cd /opt/sudytrue>nohup.outnohup eos7.5/startServer.sh &

  6. jQuery学习2

    1,jQuery中的$有什么意义. $是 JQuery 常用的一个回传函数. 很多人写jquery代码是这样开始的 $(function(){ // do something }); 事实上它是jqu ...

  7. linux c段错误分析方法

    from:http://blog.csdn.net/adaptiver/article/details/37656507 一. 段错误原因分析 1 使用非法的指针,包括使用未经初始化及已经释放的指针( ...

  8. 洛谷P1310 表达式的值

    P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例 ...

  9. [Xcode 实际操作]四、常用控件-(16)为MKMapView指定地理坐标

    目录:[Swift]Xcode实际操作 本文将演示如何自定义地图视图的的地理坐标 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先 ...

  10. javascript基础工具清单