批量 SQL 插入失败

Batch SQL Insert is Failing

我正在尝试按如下方式执行批量插入:

SQL> INSERT INTO Z (q, w, e, r) 
VALUES
('7', 'A', '3', 'A'),
('8', 'B', '4', 'An'),
('9', 'C', '5', 'And');

                           *
ERROR at line 1:
ORA-00933: SQL command not properly ended

然而它总是失败。有人可以帮我解决为什么吗? 谢谢!

如果你使用insert . . . select:

,你可以用一条语句来完成
INSERT INTO cellphone (phone_id, model, data, os) 
    SELECT '99997', 'Galaxy S IV', '4g', 'Android' FROM DUAL UNION ALL
    SELECT '99998', 'Galaxy S V', '4g', 'Android' FROM DUAL UNION ALL
    SELECT '99999', 'Galaxy S VI', '4g', 'Android' FROM DUAL;
INSERT INTO cellphone (phone_id, model, data, os) 
select '99997', 'Galaxy S IV', '4g', 'Android' from dual
union all select '99998', 'Galaxy S V', '4g', 'Android' from dual

问题是:Oracle 不支持批量插入语法,就像它在 MySQL 中的实现一样。

您可以通过多种方式实现目标。 (但我不得不承认 MySQL 批量插入语法样式在 ODBMS 中会很好。)

旁边提到的"union all select from dual"你可以看看:

使用 SQL*Loader 从 CSV 文件加载它。如果你真的想添加很多条目,我建议这样做。

为了加快单次写入插入语句的速度,请使用 "commit write batch",以便 Oracle 将批量写入语句。 (如果你还想减少 copied/written "INSERT INTO cellphone VALUES" 代码的数量,你可以编写一个 PL/SQL 过程,这样你只需要复制过程的调用。)

这里有很多关于 SQL*Loader、PL/SQL 和程序的很好的教程,如果您仍有问题,请随时提出。如果需要,我可以添加代码示例。