Oracle创建CUSTOMER表时遭遇ORA-00902无效数据类型错误求助
解决Oracle ORA-00902: invalid datatype 错误
嘿,我一眼就瞅出你这个CREATE TABLE语句里的几个语法问题,正是它们导致了ORA-00902错误。咱们一步步来拆解修复:
错误点分析
- 数据类型语法错误:你定义
Number_adopted的时候写成了(number) (1),这完全不符合Oracle的语法规范。正确的Oracle数字类型写法应该是NUMBER(1),直接把精度放在类型名后面的括号里就行,不用额外嵌套括号。 - 约束之间缺少分隔符:多个约束(主键、唯一约束、检查约束)之间必须用逗号分隔,你原语句里主键约束
"CUSTOMER_PK"后面直接接constraint "Email_uni",没有逗号,Oracle会识别不了后续的约束定义。 USING INDEX位置错误:USING INDEX是用来配置主键或唯一约束对应的索引的,它应该紧跟在对应的约束定义后面。你把它放在所有约束的最后,这会让Oracle误以为是无效的语法部分。
修正后的完整CREATE TABLE语句
CREATE TABLE "CUSTOMER" ( "CUS_ID" VARCHAR2(9), "CUSTOMER_NAME" VARCHAR2(30), "EMAIL" VARCHAR2(30), "BIRTH_DATE" DATE, "Mobile_number" NUMBER(10), "Number_adopted" NUMBER(1), CONSTRAINT "CUSTOMER_PK" PRIMARY KEY ("CUS_ID") USING INDEX ENABLE, CONSTRAINT "Email_uni" UNIQUE ("EMAIL"), CONSTRAINT "Mobile_uni" UNIQUE ("Mobile_number"), CONSTRAINT "adopted_range_ck" CHECK ("Number_adopted" >= 1 AND "Number_adopted" <= 4) );
额外说明
我把USING INDEX ENABLE移到了主键约束的后面,这才是它正确的位置;同时给所有约束之间加上了逗号分隔,修正了Number_adopted的数据类型写法。现在执行这个语句应该就能成功创建CUSTOMER表了。
内容的提问来源于stack exchange,提问作者Fido Dido




