我在oracle的oracle中添加了一个带有字段的表 -
但它内部存储它们 decimal(22,0)
有没有办法获得单个子类型(例如smallint)而不是十进制.
我的用例:
我正在使用sqoop将数据从oracle复制到hive.我需要检查oracle表的列的元数据并编写自己的oracle来进行hive数据类型映射.
但我总是得到decimal(22,0)
,所以我需要将所有这些列映射到decimal(22,0)
hive表中,即使对于smallint也是如此.
数据类型SMALLINT
,INT
只是ANSI/ISO标准类型,在Oracle中,它们是别名,NUMBER(38)
并且BIGINT
数据类型不存在.
如果要存储2字节,4字节和8字节值,则可以使用适当大小的NUMBER
列和约束检查的组合来确保数据在所需的范围内:
CREATE TABLE table_name (
small NUMBER( 5,0) CHECK ( small BETWEEN -POWER(2,15) AND +POWER(2,15)-1 ),
medium NUMBER(10,0) CHECK ( medium BETWEEN -POWER(2,31) AND +POWER(2,31)-1 ),
big NUMBER(19,0) CHECK ( big BETWEEN -POWER(2,63) AND +POWER(2,63)-1 )
);
INSERT INTO table_name VALUES ( -POWER(2,15), -POWER(2,31), -POWER(2,63) );
INSERT INTO table_name VALUES ( POWER(2,15)-1, POWER(2,31)-1, POWER(2,63)-1 );
Run Code Online (Sandbox Code Playgroud)
然后:
SELECT * FROM table_name
Run Code Online (Sandbox Code Playgroud)
输出:
SMALL MEDIUM BIG
------ ----------- --------------------
-32768 -2147483648 -9223372036854775808
32767 2147483647 9223372036854775807
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1485 次 |
最近记录: |