Oracle Apex执行多行INSERT报ORA-00933错误如何解决?
报错根因
你遇到的ORA-00933: SQL command not properly ended报错由批量插入语句的语法兼容性问题导致:你使用的单INSERT后跟多组VALUES的写法是MySQL、PostgreSQL等数据库的支持语法,Oracle 23c之前的版本均不支持该写法,语法解析时识别到第一组值后的逗号会判定语句非法结束,触发报错。
你提供的建表语句符合Oracle语法规范,无需调整。
可行解决方案
方案1:拆分为多条独立INSERT语句(兼容所有Oracle版本,最稳妥)
INSERT INTO details(ssn, gender, hair) VALUES (112, 'male', 'blonde'); INSERT INTO details(ssn, gender, hair) VALUES (132, 'female', 'blonde'); INSERT INTO details(ssn, gender, hair) VALUES (882, 'male', 'brown'); INSERT INTO details(ssn, gender, hair) VALUES (542, 'female', 'black'); INSERT INTO details(ssn, gender, hair) VALUES (662, 'male', 'red');
方案2:使用Oracle原生INSERT ALL批量语法(兼容11g及以上所有版本)
INSERT ALL INTO details(ssn, gender, hair) VALUES (112, 'male', 'blonde') INTO details(ssn, gender, hair) VALUES (132, 'female', 'blonde') INTO details(ssn, gender, hair) VALUES (882, 'male', 'brown') INTO details(ssn, gender, hair) VALUES (542, 'female', 'black') INTO details(ssn, gender, hair) VALUES (662, 'male', 'red') SELECT * FROM dual;
方案3:Oracle 23c及以上版本适配
如果你使用的是Oracle 23c及更高版本,该版本已支持多值VALUES批量插入语法,可检查语句中是否存在不可见特殊字符、多余换行/空格,或者Apex的SQL执行设置是否开启了语法兼容限制。
内容的提问来源于stack exchange,提问作者Kelvin Forde
相关产品推荐
相关产品推荐

