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

标签 oracle oracle11g

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

  • 小林特
  • 内部
  • bigint

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

有什么方法可以获取单个子类型(例如 smallint)而不是十进制。

我的用例:

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

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

最佳答案

数据类型SMALLINTINT 只是ANSI/ISO 标准类型,在Oracle 中,are aliases for 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 );

然后:

SELECT * FROM table_name

输出:

SMALL  MEDIUM      BIG
------ ----------- --------------------
-32768 -2147483648 -9223372036854775808
 32767  2147483647  9223372036854775807

关于oracle - 在 oracle 中查找数字子类型(smallint、int 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276568/

相关文章:

stored-procedures - 在哪里更改 oracle 11g 中的 NLS_DATE_FORMAT?

SQL Oracle - 如何找到同一个表的最终值?

sql - 计算 Oracle 中每个文档的给定搜索查询/术语的命中数

mysql - 在顶部显示并标记一些记录

c# - 即使在为 11g 安装了 oracle 即时客户端后,asp.net 应用程序也没有连接到 oracle 11g

oracle - impdp 奇怪的 ora 错误

java - 有没有办法用 hibernate POJO 映射表函数?

sql - 在查询中选择 2 个唯一列

oracle - 提交前更改 Oracle SQL 查询文本

sql - 删除时触发以避免悬空引用