Oracle中向T1表Change列插入自表计算数据遇ORA-00936错误
错误原因分析与正确实现方案
错误原因
- 语法错误:
INSERT ... VALUES语法不支持嵌套子查询,VALUES仅用于指定常量值组成的行,基于查询结果的批量操作应直接使用INSERT ... SELECT,无需VALUES关键字。 - 逻辑冗余:你写的
CASE语句完全多余,Close - open本身就能直接得到两者的差值,无论open和Close的大小关系,不需要分条件判断。 - 需求误解:你的目标是更新现有行的
Change列值,而非插入新行,原表中Change列已存在且仅为空值,因此使用INSERT语句是错误的,应使用UPDATE语句修改现有数据。
正确实现方案
直接使用UPDATE语句更新每一行的Change列,计算Close与open的差值即可:
UPDATE T1 SET Change = Close - open;
如果需要按Datetime顺序更新(注:此场景下排序不影响计算结果,因为每行的差值计算独立),Oracle支持带ORDER BY的UPDATE:
UPDATE T1 SET Change = Close - open ORDER BY Datetime;
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

