运行Oracle INSERT ALL插入代码为何报ORA-00928缺失SELECT关键字错误
ORA-00928 错误修复指南
错误核心原因
提交的SQL不符合Oracle INSERT ALL 语法规范,关键字位置错误导致语法解析失败。
Oracle INSERT ALL 标准语法规则
INSERT ALL -- 每一行插入对应一组 INTO + 表结构 + VALUES 声明 INTO 表名(列1, 列2, ... 列N) VALUES (值1, 值2, ... 值N) INTO 表名(列1, 列2, ... 列N) VALUES (值1, 值2, ... 值N) -- 结尾必须跟查询子句,无特殊查询需求可直接查dual表 SELECT * FROM dual;
代码存在的具体问题
- 第一个
INTO子句后多写了单独的VALUES关键字,位置不符合语法要求 - 后续3个
INTO子句后均缺失对应的VALUES声明 - 潜在问题1:
PRACTICE_ID字段的值P1、P2如果是字符串类型,需要用单引号包裹,否则Oracle会将其识别为字段名抛出错误 - 潜在问题2:
SALARY字段如果是数值类型,不要加单引号和千位分隔符逗号,避免格式转换错误
修复后参考代码
INSERT All INTO VET (VET_ID, SURNAME, FORENAME, TITLE, EXT_NUMBER, POSITION, SALARY, PRACTICE_ID) VALUES ('V01', 'WILSON', 'SARAH', 'DR', '6122', 'SENIOR PARTNER', 45000, 'P1') INTO VET (VET_ID, SURNAME, FORENAME, TITLE, EXT_NUMBER, POSITION, SALARY, PRACTICE_ID) VALUES ('V02', 'MCDONALD', 'BRYAN', 'DR', '6153', 'SENIOR PARTNER', 35000, 'P1') INTO VET (VET_ID, SURNAME, FORENAME, TITLE, EXT_NUMBER, POSITION, SALARY, PRACTICE_ID) VALUES ('V03', 'PATEL', 'JANE', 'DR', '6165', 'JUNIOR PARTNER', 29000, 'P2') INTO VET (VET_ID, SURNAME, FORENAME, TITLE, EXT_NUMBER, POSITION, SALARY, PRACTICE_ID) VALUES ('V04', 'MCCAFFERTY', 'TREVOR', 'MR', '6166', 'JUNIOR PARTNER', 25600, 'P2') SELECT * FROM dual;
内容的提问来源于stack exchange,提问作者Wielik
相关产品推荐
相关产品推荐

