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

Oracle新增取值10-180默认30的数值列报ORA-00907错误求解

错误原因

你写的SQL一共有3个问题,其中直接触发ORA-00907报错的是语法顺序错误:

  • 列定义子句顺序不符合Oracle语法规范:新增列时DEFAULT默认值的定义必须放在CHECK约束之前,你把DEFAULT写在了CHECK约束的闭合括号之后,SQL解析器读到不符合顺序的关键字时,无法正确识别结构,就抛出了"缺失右括号"的误导性报错,并不是真的少写了括号。
  • CHECK约束的取值逻辑写反了:你写的判断条件是tiempo_empleado <= 10 AND tiempo_empleado >= 180,这个条件永远不可能成立,和你要求的"取值范围10到180"完全相反。
  • 存在大量无意义的嵌套括号:数值常量、判断条件外都套了多余的括号,很容易造成括号匹配混乱,虽然不会直接触发报错,但会大幅降低SQL可读性。
修正后的SQL

基础版本可以直接执行:

ALTER TABLE avisos 
ADD tiempo_empleado NUMBER(3,0) DEFAULT 30
CHECK (tiempo_empleado >= 10 AND tiempo_empleado <= 180);

如果想方便后续维护约束,推荐给CHECK约束显式命名,同时用BETWEEN简化范围判断,效果完全等价:

ALTER TABLE avisos 
ADD tiempo_empleado NUMBER(3,0) DEFAULT 30
CONSTRAINT chk_avisos_tiempo_range CHECK (tiempo_empleado BETWEEN 10 AND 180);

内容的提问来源于stack exchange,提问作者juan rangel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:48:34