在leave25表最后一列插入日期差值报错‘列不允许’,求解决
解决INSERT语句中“列不允许”的错误
咱们一步一步拆解你遇到的问题:
1. 核心语法误区:INSERT VALUES子句里不能直接引用表列名
你写的startdate-enddate是想调用表中的列,但在INSERT ... VALUES的上下文里,数据库根本不知道你说的startdate和enddate是什么——你是在插入新行,这两个值是你刚刚在VALUES里指定的(第4、5位的日期),此时它们还没被存入表中,自然无法被引用。
正确的做法是直接计算你给出的两个日期的差值,替换掉列名引用:
INSERT INTO leave25 VALUES ( 4, 4, 'SICK', TO_DATE('22-AUG-14','DD-MON-YY'), TO_DATE('22-SEP-14','DD-MON-YY'), TO_DATE('22-SEP-14','DD-MON-YY') - TO_DATE('22-AUG-14','DD-MON-YY') );
小提示:Oracle中日期相减得到的是天数,想要正数结果的话,记得用结束日期减开始日期(上面例子里9月减8月,会得到31天)。
2. 其他需要修正的细节
- 拼写不规范:
vALUES虽然不影响执行,但推荐写成标准全大写VALUES; - 冗余符号:语句末尾的反斜杠
\要删掉,它会被数据库识别为语法错误; - 列类型匹配:务必确认表的第6列是数值类型(比如
NUMBER),如果是日期类型,插入天数差值肯定会触发“列不允许”的报错——这时候你需要调整表结构,或者换用INTERVAL相关的日期计算方式。
额外提醒:如果是更新已有行,别用INSERT!
如果你不是要插入新行,而是想给表中已有的行填充第6列的日期差值,那应该用UPDATE语句,而不是INSERT:
UPDATE leave25 SET days_diff = end_date - start_date;
(把days_diff、end_date、start_date替换成你表中实际的列名即可)
内容的提问来源于stack exchange,提问作者user2147357
相关产品推荐
相关产品推荐

