首页 > 解决方案 > 无法在 SQL CREATE TABLE 命令中设置 INTEGER 数据类型的精度

问题描述

我正在尝试在 Oracle 中创建下表。

CREATE TABLE CUSTOMER(CUST_ID INT(10),
CUST_NAME   VARCHAR2(50),
CUST_SEX    CHAR(2),
CUST_STATE  VARCHAR2(50),
CUST_COUNTRY    VARCHAR2(50));

我收到一条错误消息,提示缺少右括号。实际上,问题在于 CUST_ID 列的 INT 数据类型。从 DDL 查询中删除精度 :(10) 后,我就能够成功执行它。

Oracle 文档没有指定有关此数据类型是否可以伴随精度参数的任何内容。但是 Oracle 确实提到 INTEGER/INT 符合 ANSI 标准。

https://docs.oracle.com/cd/B19306_01/olap.102/b14346/dml_datatypes002.htm

某些其他非官方参考资料将 INT/INTEGER 描述为 NUMBER(38) 的同义词。

有人可以告诉我是否确实不能为 INT 数据类型指定精度吗?

标签: oracleprecisionddlcreate-tableoracle18c

解决方案


Oracle 文档指出:

创建表和集群的 SQL 语句也可以使用来自 IBM 产品 SQL/DS 和 DB2 的 ANSI 数据类型和数据类型。Oracle 识别不同于 Oracle 数据库数据类型名称的 ANSI 或 IBM 数据类型名称。它将数据类型转换为等效的 Oracle 数据类型

如下表所示,该句子指出,、、intinteger(令人惊讶?)smallint都是 的同义词number(38),因此您无法为它们指定精度。对于您的用例,如果您想要一个十位数的整数,您应该使用number(10).


推荐阅读