Oracle SQL执行Insert Select语句报ORA-00936缺失表达式错误如何解决
ORA-00936 报错原因及修复方案
核心错误点
- 字段数量不匹配:INSERT语句指定要插入5个字段(
ID、ID_UUID、GPSCENARIO_UUID、ACTION、VERSION),但SELECT子句返回了7个字段,数量完全不匹配。
- 字段数量不匹配:INSERT语句指定要插入5个字段(
- SELECT子句非法使用DEFAULT关键字:Oracle不支持在SELECT查询的字段列表中使用
DEFAULT关键字,DEFAULT仅可用于INSERT的值列表场景。如果ID字段是自增主键/配置了默认值,直接从INSERT的字段列表中移除该字段即可,数据库会自动填充默认值。
- SELECT子句非法使用DEFAULT关键字:Oracle不支持在SELECT查询的字段列表中使用
- 子查询关联字段疑似错误:
where ACTION.id not in (select ACTION FROM GroupScenarioAction部分,GroupScenarioAction表中存储ACTION关联值的字段大概率是ACTION_ID而非ACTION,需要核对表字段名,避免关联逻辑错误。
- 子查询关联字段疑似错误:
- 语法冗余提示:INSERT的SELECT子句不需要加外层括号,Oracle语法下加括号不会触发报错,但属于冗余写法。
修正后参考SQL
假设ID字段为自增主键/有默认值,且GroupScenarioAction的关联字段为ACTION_ID,修正后语句如下:
insert into GroupScenarioAction (ID_UUID, GPSCENARIO_UUID, ACTION, VERSION) select '0', ACTION.ID_UUID, '5310AFAA......', '1' from ACTION where ACTION.id not in ( select ACTION_ID from GroupScenarioAction where GPSCENARIO = '1' );
如果ID字段需要手动指定序列值,将序列补充到字段列表即可:
insert into GroupScenarioAction (ID, ID_UUID, GPSCENARIO_UUID, ACTION, VERSION) select 你的序列名.nextval, '0', ACTION.ID_UUID, '5310AFAA......', '1' from ACTION where ACTION.id not in ( select ACTION_ID from GroupScenarioAction where GPSCENARIO = '1' );
内容的提问来源于stack exchange,提问作者Sajjad Serajzadeh
相关产品推荐
相关产品推荐

