如何使用 SQL Developer 为完整的 table 数据生成单个插入语句?

How to generate single insert statement for full table data using SQL Developer?

我的 Oracle Table 中有一个 table,其中包含 1,000,000 条记录。

我可以使用SQLDeveloper作为脚本生成1,000,000条插入语句。

不过要运行这个脚本,要花很多时间。

有什么方法可以为 table 中的所有值生成 1 个插入语句,我知道 运行 时不会花费太多时间。

最简单的方法是创建一个匿名 PL/SQL 块:

begin
    --add 1 million inserts here
    commit;
end;
/

这消除了几乎所有的网络往返。这不是最有效的解决方案,但它是一个简单的更改,非常接近最有效的解决方案。

创建这么大的匿名块可能会导致类似 PLS-00123: program too large (Diana nodes) 的错误。如果发生这种情况,将程序分解为 小块再试一次。

Is there any way i can generate 1 single insert statement for all values in the table which when run i know will not take so much time.

您可以使用 INSERT ALL 语句。

INSERT ALL 语句用于通过单个 INSERT 语句添加多行。这些行可以插入到一个 table 或多个 table 中,仅使用一个 SQL 命令。

例如,

INSERT ALL
  INTO suppliers (supplier_id, supplier_name) VALUES (1000, 'IBM')
  INTO suppliers (supplier_id, supplier_name) VALUES (2000, 'Microsoft')
  INTO suppliers (supplier_id, supplier_name) VALUES (3000, 'Google')
SELECT * FROM dual;

相当于 3 个 INSERT 语句。