You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Oracle SQL*Plus创建表时遭遇ORA-00902无效数据类型错误求助

问题排查与解决方案

你的建表语句存在两个Oracle不支持的原生数据类型,这是触发ORA-00902错误的核心原因:

1. BOOLEAN 类型

Oracle数据库没有原生BOOLEAN数据类型,需要用替代类型实现相同逻辑:

  • 推荐使用 NUMBER(1),用0代表假、1代表真
  • 或者使用 CHAR(1),用'Y'代表真、'N'代表假

2. REAL 类型

Oracle中的REAL是FLOAT(63)的别名,但部分场景下兼容性较差,建议显式使用FLOAT或指定精度的NUMBER类型(比如NUMBER(10,6),可根据数据精度需求调整)

修正后的建表语句(基于数字型布尔标识)

CREATE TABLE Plays (
    playId INT PRIMARY KEY,
    gameId INT,
    playNumber INT,
    quarter INT,
    time TIMESTAMP,
    yardLine INT,
    possessionTeam VARCHAR2(10),
    playType VARCHAR2(10),
    yardGain INT,
    yardsToGo INT,
    down INT,
    distance INT,
    yardsToEndzone INT,
    scoreDiff INT,
    epa NUMBER(10,6), -- 替换REAL为指定精度的NUMBER
    isRush NUMBER(1), -- 替换BOOLEAN为NUMBER(1)
    isPass NUMBER(1),
    isIncomplete NUMBER(1),
    isTouchdown NUMBER(1),
    passType VARCHAR2(10),
    passLocation VARCHAR2(10),
    rushDirection VARCHAR2(10),
    rushLocation VARCHAR2(10),
    receiver VARCHAR2(20),
    defender VARCHAR2(20)
);

替代方案(基于字符型布尔标识)

如果偏好使用字符标识布尔值,可添加约束限制取值范围:

CREATE TABLE Plays (
    playId INT PRIMARY KEY,
    gameId INT,
    playNumber INT,
    quarter INT,
    time TIMESTAMP,
    yardLine INT,
    possessionTeam VARCHAR2(10),
    playType VARCHAR2(10),
    yardGain INT,
    yardsToGo INT,
    down INT,
    distance INT,
    yardsToEndzone INT,
    scoreDiff INT,
    epa FLOAT, -- 替换REAL为FLOAT
    isRush CHAR(1) CHECK (isRush IN ('Y','N')),
    isPass CHAR(1) CHECK (isPass IN ('Y','N')),
    isIncomplete CHAR(1) CHECK (isIncomplete IN ('Y','N')),
    isTouchdown CHAR(1) CHECK (isTouchdown IN ('Y','N')),
    passType VARCHAR2(10),
    passLocation VARCHAR2(10),
    rushDirection VARCHAR2(10),
    rushLocation VARCHAR2(10),
    receiver VARCHAR2(20),
    defender VARCHAR2(20)
);

内容的提问来源于stack exchange,提问作者Ken David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:43:20