Oracle数据库创建表时报ORA-00904无效标识符错误如何解决
ORA-00904报错原因
- 直接使用Oracle保留关键字作为列名:
Level属于Oracle内置保留关键字,直接用作列名会被识别为非法标识符。 - 数据类型参数超出合法范围:
HP列定义为number(1000),Oracle的NUMBER类型精度最大仅支持38位,1000超出合法取值范围。Money列定义为varchar2(10000),Oracle默认配置下SQL场景的VARCHAR2类型最大长度为4000字节,10000超出上限。
修复方案
建议修改列名避免使用保留字,同时调整数据类型参数到合法范围,修改后的建表语句参考如下:
create table player_info ( player_id varchar2(200) primary key, user_id varchar2(100) not null, player_level varchar2(200) not null, hp number(10) not null, map_id varchar2(200) not null, model_id varchar2(200) not null, money number(20,2) not null, boss_killed varchar2(100) );
修复说明:
- 将保留字
Level改为player_level,避免关键字冲突,同时更贴合字段语义 - 将
HP的精度从1000调整为10,足够覆盖常规游戏HP的取值范围 - 金额字段
Money从字符串类型改为数值类型number(20,2),支持存储最大18位整数加2位小数的金额,也避免了字符串长度超限问题;如果确实需要存储字符串格式的超长金额,可以改为CLOB类型 - 将
Model_id的varchar改为Oracle官方推荐的varchar2类型,避免潜在的兼容性问题
内容的提问来源于stack exchange,提问作者user14480205
相关产品推荐
相关产品推荐

