【发布时间】:2012-11-09 17:57:39
【问题描述】:
我使用 oracle 字典视图来找出两个模式之间的列差异(如果有的话)。在同步数据类型差异时,我发现 NUMBER 和 INTEGER 数据类型都存储在 all_tab_columns/user_tab_columns/dba_tab_columns 中,因此很难同步一个模式/列具有数字数据类型而另一个模式/列具有整数数据类型的数据类型差异.
在比较模式时,它显示数据类型不匹配。请建议是否有任何其他替代形式使用字典视图,或者是否可以使用字典视图中的任何特定属性来识别数据类型是否为整数。
【问题讨论】:
-
:
Number是 oracle 的built in数据类型,而Integer是ANSI datatypes和来自 IBM 产品 SQL/DS 和 DB2 的数据类型,所以 Oracle 内部转换Integer to NUMBER(38)。我认为从SELECT DBMS_METADATA.GET_DDL('TABLE', '<table_name>','<schema_name>') AS DDL FROM DUAL;获取实际数据类型的唯一方法 -
这是我考虑的最后一个选项,因为我只有很少的差异,它会影响性能,而且从不同的表中获取列位置也很乏味。
-
专家您好,有什么其他建议请...
-
我得到了 oracle 支持的回复,指出整数数据类型已被弃用并保留关键字以保持兼容性。整数数据类型被视为 number(38,0) 数据类型。
-
Oracle 支持的回复不是很有帮助,因为 INTEGER 仍在大量使用中,并且正如您所发现的,由 SQL*Plus DESCRIBE 等实用程序报告。根据我的测试,似乎在 data_type = 'NUMBER'、data_precision 为 null 且 data_scale = 0 的情况下报告了 INTEGER,但很高兴看到官方确认。
标签: oracle11g