Oracle PHP插入大量行

时间:2018-07-23 19:21:50

标签: php oracle

嘿,我尝试搜索,找不到任何对我有帮助的人。 基本上,我查询此数据库并得到一些结果(〜4000行)。 然后,我将这些结果加载到带有Form1的数组中。

然后我尝试将这些值插入另一个数据库

FormCreate

这很好,但是执行大约需要10分钟。我尝试使用AdoConnection1,但无法正常使用。

你们有没有机会知道在Oracle中插入更有效的方法?谢谢。

1 个答案:

答案 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

相关问题