oracle - 十进制(s,p)或数字(s,p)?

标签 oracle db2 ansi type-conversion

最近,在进行db2-> oracle迁移项目时,我们遇到了这种情况。
开发人员无意间使用十进制(s,p)列创建了新的表结构。我不记得Oracle支持此功能,但是随后的一些挖掘表明它是ANSI数据类型,因此受oracle支持。

但是,对我来说,问题仍然存在-


内部如何处理这些数据?
使用ANSI类型而不是Oracle的内置类型是否有成本?
如果目标类型是Oracle内置类型,那么在数据迁移期间会产生影响吗?

最佳答案

在Oracle中,they are the same


创建表和集群的SQL语句也可以使用ANSI数据
IBM产品SQL / DS和DB2中的类型和数据类型。甲骨文
识别与Oracle不同的ANSI或IBM数据类型名称
数据库数据类型名称。它将数据类型转换为等效
Oracle数据类型,记录Oracle数据类型作为名称
列数据类型,并以Oracle数据类型存储列数据
根据下表中显示的转换。


该引号下方的表显示DECIMAL(p,s)在内部被视为NUMBER(p,s)

SQL> create table t (a decimal(*,5), b number (*, 5));

Table created

SQL> desc t;
Name Type        Nullable Default Comments 
---- ----------- -------- ------- -------- 
A    NUMBER(*,5) Y                         
B    NUMBER(*,5) Y  


但是,DECIMAL的小数位数默认为0,这意味着将DECIMAL(*)视为NUMBER(*, 0),即INTEGER

SQL> create table t (a decimal, b number, c decimal (5), d decimal (5));

Table created

SQL> desc t;
Name Type      Nullable Default Comments 
---- --------- -------- ------- -------- 
A    INTEGER   Y                         
B    NUMBER    Y                         
C    NUMBER(5) Y                         
D    NUMBER(5) Y   

关于oracle - 十进制(s,p)或数字(s,p)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11031409/

相关文章:

mysql - 在oracle中的同一列中交换名称

java - 语句有动态表名时如何防止SQL注入(inject)?

java - 如何获取一个PreparedStatement在DB2中即将执行的完整查询?

c - 我如何获得 ANSI C 标准的副本?

windows - 具有 ANSI 代码呈现支持 Windows 的文本编辑器/查看器

sql - 甲骨文 TO_DATE 不工作

c# - 使用 C# 从 Oracle DB 返回 Int 值

sql - 困难连接 (SQL)

mysql - SQL Count() child Rows 基于来自 Parent 的值

c++ - 为什么 C++ 中有替代标记?