现在我做以下事情
INSERT ALL
into "table" (col1, col2, col3....) values (val1,val2,val3...)
...
select 1 from dual;
然而,这需要sql代码包含每个插入的列(我关心这个,因为我将此sql语句存储为.sql文件,并且它需要200mb,希望它更小)。有没有方法可以做到以下几点?假设所有插入都是针对同一个表:
INSERT ALL INTO "Table" (col1,col2,col3...)
Values
(val1,val2,val3...)
(val1,val2,val3...)
...
select 1 from dual;
因为这会将文件大小减少一半
1条答案
按热度按时间2w3rbyxf1#
如果所有数据都进入同一个表,为什么不只存储数据并将其加载到目标表比缓慢的逐个插入快得多?
这里有一个使用external table的选项。它需要创建目录,并向将要使用它的用户授予读/写权限。DBA通常会创建它。因为我已经有了这个设置:
我不会再这么做了询问您是否需要帮助。
示例数据存储在
data_for_test.txt
文件中,位于我的c:\temp
目录中。为什么它会在我的本地PC上?因为我在笔记本电脑上运行Oracle 21 cXE。文件内容:目标表:
创建外部表;它的作用就好像它是文件的“视图”:
从中选择:
很好,所有的东西都在这里。最后,将数据插入目标表:
成交
另一个选择是使用更快的SQL*Loader实用程序。它的优点是-正如我所说的-非常快,它允许源数据文件存储在您自己的计算机上,无论数据库在哪里。
您需要一个控制文件,它 * 指示 * 实用程序做什么(在我的示例中,它的名称是
test12.ctl
):从操作系统命令提示符调用加载:
结果:
现在你有两个选择。如果我是你,我会放弃你现在的选择。