oracle表结构比对,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 ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值