在oracle中查找数字子类型(smallint,int等)

dev*_*v ツ 1 oracle oracle11g

我在oracle的oracle中添加了一个带有字段的表 -

  • SMALLINT
  • INT
  • BIGINT

但它内部存储它们 decimal(22,0)

有没有办法获得单个子类型(例如smallint)而不是十进制.

我的用例:

我正在使用sqoop将数据从oracle复制到hive.我需要检查oracle表的列的元数据并编写自己的oracle来进行hive数据类型映射.

但我总是得到decimal(22,0),所以我需要将所有这些列映射到decimal(22,0)hive表中,即使对于smallint也是如此.

MT0*_*MT0 6

数据类型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)