执行INSERT SQL语句报ORA-00926缺失VALUES关键字错误如何解决
ORA-00926 错误原因及修复方案
错误原因
你写的第一行INSERT语句只声明了要插入的表和字段,没有跟上对应的VALUES子句就直接写了下一条INSERT语句,Oracle解析SQL时找不到第一行INSERT对应的VALUES,就会抛出missing VALUES keyword错误。
另外你第四条插入语句的第三个字段值是'Cloridrato de Metformina',和第一行声明的posologia(用法用量)字段的业务含义不符,建议核对调整。
修复方案
你可以根据需求选择以下两种修复方式:
方式1:保留逐条插入逻辑
删掉第一行多余的无VALUES的INSERT语句即可,如果你想避免表结构变更后插入出错,可以给每条INSERT都加上字段声明:
INSERT INTO T_RECEITA_MEDICAMENTO (cd_receita, cd_medicamento, posologia) VALUES (1, 2, '2x ao dia'); INSERT INTO T_RECEITA_MEDICAMENTO (cd_receita, cd_medicamento, posologia) VALUES (2, 1, '6x ao dia'); INSERT INTO T_RECEITA_MEDICAMENTO (cd_receita, cd_medicamento, posologia) VALUES (3, 3, '1 comprimido a cada 12 horas'); -- 请确认本条的posologia字段值符合业务要求后再执行 INSERT INTO T_RECEITA_MEDICAMENTO (cd_receita, cd_medicamento, posologia) VALUES (2, 1, 'Cloridrato de Metformina');
方式2:12c以上版本用批量插入语法
如果你的Oracle版本为12c及以上,可以用INSERT ALL语法一次性插入多条,执行效率更高:
INSERT ALL INTO T_RECEITA_MEDICAMENTO (cd_receita, cd_medicamento, posologia) VALUES (1, 2, '2x ao dia') INTO T_RECEITA_MEDICAMENTO (cd_receita, cd_medicamento, posologia) VALUES (2, 1, '6x ao dia') INTO T_RECEITA_MEDICAMENTO (cd_receita, cd_medicamento, posologia) VALUES (3, 3, '1 comprimido a cada 12 horas') INTO T_RECEITA_MEDICAMENTO (cd_receita, cd_medicamento, posologia) VALUES (2, 1, 'Cloridrato de Metformina') SELECT 1 FROM DUAL;
内容的提问来源于stack exchange,提问作者Daniel Alves Soares
相关产品推荐
相关产品推荐

