菜鸟学sql,Oracle数据库结构比较

转载自:http://www.cnblogs.com/tianqing/archive/2008/06/25/1229419.html

做oracle下数据库结构比较,比较具体详细差异,例如:2个库具体有那些表不同,不同在什么地方,主键、长度、类型......,要求是用一句sql实现,对于我这个sql菜鸟来说,的确是个挑战。好在有个SQL Server例子可以借鉴。先贴一下oracle下的sql

--------------------------------------------------------------------------------------
--oracle数据库帐套比较,
--在本例中,databaseA数据库,
          --databaseB是数据库。
--在实际的运行过程中,请依据需要修改本sql
--------------------------------------------------------------------------------------
select (case when a.表名1 is null and b.序号=1 then ‘库1缺少表:‘||b.表名2
                     when b.表名2 is null and a.序号=1 then ‘库2缺少表:‘||a.表名1
                     when a.字段名 is null and exists(select 1 from (select table_name as 表名1  from DBA_TAB_COLUMNS where upper(DBA_TAB_COLUMNS.owner) =upper(‘databaseB‘)) where 表名1=b.表名2) then ‘库1 [‘||b.表名2||‘] 缺少字段:‘||b.字段名
                     when b.字段名 is null and exists(select 1 from (select table_name as 表名2  from DBA_TAB_COLUMNS where upper(DBA_TAB_COLUMNS.owner) =upper(‘databaseA‘)) where 表名2=a.表名1) then ‘库2 [‘||a.表名1||‘] 缺少字段:‘||a.字段名
                     when a.主键<>b.主键 then ‘主键不同‘
                     when a.类型<>b.类型 then ‘类型不同‘
                     when a.字段长度<>b.字段长度 then ‘字段长度不同‘
                     when a.精度<>b.精度 then ‘精度不同‘
                     when a.小数位<>b.小数位 then ‘小数位不同‘
                     when a.允许空<>b.允许空 then ‘允许空不同‘
                else ‘‘ end) result,a.*,b.*
from (select a.table_name as 表名1, a.column_name as 字段名,b.constraint_type as 主键, a.data_type as 类型,column_id as 序号, a.data_length as 字段长度, a.data_precision as 精度,  a.data_scale as 小数位, a.nullable as 允许空
   from all_tab_columns a left join (select d.constraint_type,e.column_name,e.table_name from all_constraints d,all_cons_columns e
 where  d.owner  =  e.owner  and d.table_name  =  e.table_name and
  d.constraint_name  =  e.constraint_name and d.constraint_type  = ‘P‘) b on a.COLUMN_NAME = b.column_name and a.TABLE_NAME = b.table_name
   where  a.owner  = upper(‘databaseB‘) order by 表名1 asc) a

full join (select a.table_name as 表名2, a.column_name as 字段名,b.constraint_type as 主键, a.data_type as 类型,column_id as 序号, a.data_length as 字段长度, a.data_precision as 精度,  a.data_scale as 小数位, a.nullable as 允许空
   from all_tab_columns a left join (select d.constraint_type,e.column_name,e.table_name from all_constraints d,all_cons_columns e
 where  d.owner  =  e.owner  and d.table_name  =  e.table_name and
  d.constraint_name  =  e.constraint_name and d.constraint_type  = ‘P‘) b on a.COLUMN_NAME = b.column_name and a.TABLE_NAME = b.table_name
   where  a.owner  = upper(‘databaseA‘) order by 表名2 asc) b
on a.表名1=b.表名2 and a.字段名=b.字段名
where  a.表名1 is null or a.字段名 is null or b.表名2 is null or b.字段名 is null  or a.类型<>b.类型 or a.字段长度<>b.字段长度 or a.精度<>b.精度 or a.小数位<>b.小数位 or a.允许空<>b.允许空 or a.主键<>b.主键
order by nvl(a.表名1,b.表名2),nvl(a.序号,b.序号)

执行结果显示的差异信息比较详细。可以依据这个来修改数据库,比较方便。
现在分析下这句sq的语法。
1.将两个数据库oracle叫schema下的所有表结构select出来,即:

所有表结构
select a.table_name as 表名1, a.column_name as 字段名,b.constraint_type as 主键, a.data_type as 类型,column_id as 序号, a.data_length as 字段长度, a.data_precision as 精度,  a.data_scale as 小数位, a.nullable as 允许空
  from all_tab_columns a left join (select d.constraint_type,e.column_name,e.table_name from all_constraints d,all_cons_columns e
  where  d.owner  =  e.owner  and d.table_name  =  e.table_name and
   d.constraint_name  =  e.constraint_name and d.constraint_type  = ‘P‘) b on a.COLUMN_NAME = b.column_name and a.TABLE_NAME = b.table_name
  where  a.owner  = upper(‘databaseB‘) order by 表名1 asc

通过上述sql就可以将某个数据库下的表结构select出来,通过left join 关联列的主键。
2. 将要比较的两个库的表结构用full join 关联起来。
3. 同在用case来比较具体不同信息。然后在加上where条件。

综述,比较oracle中,2个数据库的表结构基本就用上述sql比较了,效率有些慢,朋友们有好的建议可以谈谈。谢谢。

时间: 2024-08-01 01:51:39

菜鸟学sql,Oracle数据库结构比较的相关文章

oracle数据库结构及基本操作

本篇博客主讲oracle数据库的基本操作,作为目前世界上使用范围最广的数据库管理系统,充分体现出其功能的强大和可靠.首先,oracle数据库结构是我们必须了解的,有助于掌握oracle数据库操作. 系统简介 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一. 如图所示:SGA---为数据库提供服务PGA---为用户提供服务整个系统主要分为两大部分:(一)实例-管理端

Oracle数据库结构

表空间和数据文件 1.表空间是一个数据库的磁盘逻辑空间. 2.每个表空间由一个或多个数据文件组成. 3.一个数据文件只能属于一个表空间. 完成Oracle系统安装并创建Oracle实例后,Oracle系统会自动创建多个表空间和数据文件. SELECT FILE_NAME, TABLESPACE_NAME, BYTES FROM DBA_DATA_FILES; 临时表空间和临时文件 临时表空间是Oracle系统用于存放与排序有关的特殊表空间.当操作中需要排序时,Oracle系统会将排序的数据存放在

pl/sql developer中如何导出oracle数据库结构? 参考文章一

本文作者来自csdn的xieyuooo地址为 : http://bbs.csdn.net/topics/340209135 进入PL/SQL后,使用如下图所示的操作步骤: 然后会弹出一个窗口,在弹出窗口操作如下,操作后就O了:

sql操作数据库结构

1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME DROP COLUMNcolumn_NAME3.修改字段类型 ALTER TABLE table_name ALTER COLUMNcolumn_name new_data_type4.sp_rename 改名 EXEC sp_rename '[dbo].[Table_1].[filedName1]', 'filedName2', 'COLUMN

[PL/SQL]oracle数据库的导出导入

一.PL/SQL Developer工具一般对oracle的导入导出有以下4中方式: 1.Oracle导出导入方式 这种方式导出导入为.dmp的文件格式,.dmp文件是二进制的,可以跨平台,还能包含权限,效率不错,用途最广.另外,该方式导出导入后,表结构和索引结构没有发生变化,而另外2种方式都会改变索引类型. 2.SQL插入方式 这种方式导出导入为.sql文件格式,可以用文本编辑器查看,通用性比较好,但效率不如第一种,适合小数据量导入导出.尤其注意的是表中不能有大字段(blob.clob.lon

轻松学SQL Server数据库pdf

下载地址:网盘下载 目录: 第1章 数据库与SQL Server 2008 11.1 数据库基础 21.1.1 数据库的概念 21.1.2 数据库模型 21.2 什么是关系型数据库 21.2.1 关系型数据库的概念 31.2.2 一些常用术语 41.2.3 数据库管理系统的功能 41.2.4 关系模型完整性规则 51.3 实体关系(E-R)模型 51.3.1 实体模型 61.3.2 关系模型 61.4 数据库设计的三大范式 71.5 SQL Server 2008的体系结构 91.6 SQL S

dog4444勒索病毒解密成功SQL/Oracle数据库pig4444勒索病毒解密

北京天一解密是一家从事解密勒索病毒的专业机构,我们从业三年多来解决各种勒索病毒数百起,失败的案例几乎为0.我们服务过各种厂家.公司.集团,无一例外的是客户对我们的评价是百分百满意.从业这么长时间我们碰到的病毒后缀各种各样,比如:.bip .dbger .ARROW .ARENA .IQ .CC .crypted .BIG4+ .CRAB .SATAN .JAVA .VYA+ .MAKGR .PANDA . ALCO .CHAK .TRUE .SHUNK .GOTHAM .GRANNY .RESE

dog4444勒索病毒解密成功SQL/Oracle数据库天一解密pig4444

2北京某科技公司在上班后发现服务器的所有数据都打不开,并且每个文件后面多了一个dog4444的后缀,导致公司无法正常运作.幸运的是网管大哥通过贴吧找到我们天一解密,公司了解情况后立即派工程师赶往现场,终于在5小时后为客户成功解密了dog4444的勒索病毒.获得客户的强烈推荐!对抗勒索病毒,我们是专业的! 原文地址:http://blog.51cto.com/13970431/2175501

oracle学习入门系列之五 内存结构、数据库结构、进程

oracle学习入门系列之五 内存结构.数据库结构.进程 上篇蛤蟆简单描述了oracle公司的数据库产品.其他产品及oracle软件的一些特点.干货虽有但是真心是比较少的,这篇开始就是以干货为主,其中夹杂一些扯淡的事情了.蛤蟆一直也在想如何能生动的通过这干巴巴的文字来描述着世界级的软件,太理论大家都看不下去,太实践又缺乏深度.想想自己上大学那会,老师的讲课,无不枯燥乏味啊,满满的兴趣尽是消耗殆尽.所以不能仿效之,我们得走自己特色的路.以最易懂的形式.比喻等手段描述深奥的计算机知识.走起~ 开篇问