oracle - 比较 Oracle 数据库之间的列定义

标签 oracle oracle10g

我有两个不同的数据库 Miadb 和 DWH。我想比较不同数据库中两个表的列定义。

我写了这个 SQL,但它不起作用:

SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='ibrmt030@miadb' 
minus
SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='ibrmt030@dwh';

错误消息是:

ORA-00997: geçersiz LONG veri türü kullanımı
    00997. 00000 -  "illegal use of LONG datatype"

Cause:    
*Action:
Error at Line: 1 Column: 8

最佳答案

USER_TAB_COLUMNS 不包含其他数据库中表的条目。

这可能会起作用:

SELECT * FROM USER_TAB_COLUMNS@miadb WHERE TABLE_NAME='IBRMT030' 
minus
SELECT * FROM USER_TAB_COLUMNS@dwh WHERE TABLE_NAME='IBRMT030';

其中有许多元数据列可能会导致系统之间的行不匹配(其中之一可能是 LONG 数据类型,这会导致该错误)。将您的查询限制为仅必需的列。

顺便说一句,如果 DWH 的数据库有额外的列,则此查询中不会识别出这些列。您最好在数据集之间实现完整的外部联接。

关于oracle - 比较 Oracle 数据库之间的列定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696615/

相关文章:

database - Windows 中的 oracle 数据库存储在哪里

sql - 如何在oracle中使用其同义词截断任何表?

java - Hibernate - 使用sqlQuery时,面临 "data exception: invalid datetime format"问题

oracle - 将父子数据放入基于 Oracle 级别的 OLAP 层次结构

java - SQL Server 中不存在的 Oracle 日期时间

oracle - SQL 插入语句中的分号和单引号问题

sql - 将 Oracle DATE 列迁移到带时区的 TIMESTAMP

oracle10g - 如何删除以分区名称作为生成参数的 Oracle 分区

java - 使用 JDBC 在 Oracle 中检索最后插入的 ID

c - text * 而不是 char *