嘿,我尝试搜索,找不到任何对我有帮助的人。
基本上,我查询此数据库并得到一些结果(〜4000行)。
然后,我将这些结果加载到带有Form1
的数组中。
然后我尝试将这些值插入另一个数据库
FormCreate
这很好,但是执行大约需要10分钟。我尝试使用AdoConnection1
,但无法正常使用。
你们有没有机会知道在Oracle中插入更有效的方法?谢谢。
答案 0 :(得分:0)
一般的答案是:
使用绑定变量,否则会在数据库中引起大量语句解析,并且无法重用数据结构。
避免在每个INSERT上提交(您已经弄清楚了)。做:
$s = oci_parse($c, 'insert into ptab (pdata) values (:bv)');
oci_bind_by_name($s, ':bv', $v, 20, SQLT_CHR);
foreach ($a as $v) {
$r = oci_execute($s, OCI_NO_AUTO_COMMIT); // Use alias OCI_DEFAULT in older OCI8 versions
}
oci_commit($c);
尽可能使用oci_bind_array_by_name()。像这样:
$a = array('abc', 'def', 'ghi', 'jkl');
$s = oci_parse($c, "begin mypkg.myinsproc(:a); end;");
oci_bind_array_by_name($s, ":a", $a, count($a), -1, SQLT_CHR);
oci_execute($s);
(请参阅http://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html第195页)
对于大型数据集来说,更快或更快速的方法是使用具有批处理插入API的Python cx_Oracle,Node.js node-oracledb,JDBC或OCI。 https://blogs.oracle.com/opal/efficient-and-scalable-batch-statement-execution-in-python-cx_oracle