2015-12-22 68 views
1

我正在使用Perl DBD :: Oracle嘗試將XML字符串數組批量插入Oracle XMLTYPE列。如果我批量插入到CLOB中,但我嘗試通過Strawberry Perl插入XMLTYPE列時,它可能會崩潰。批量插入Oracle XMLTYPE使用Perl

有沒有人能夠從Perl批量插入XMLTYPE?

以下是兩個代碼片段。一個用於CLOB和第二對XMLTYPE ....

sub save_xml {
$log->write("Inserting XML messages into table:$table, in $mode: mode"); my @status; my $sql='INSERT INTO ' . $table . ' (XMLCONTENT) VALUES (?)'; my $sth = $dbh->prepare_cached($sql) || die "Cannot prepare statement: $DBI::errstr"; $sth->bind_param_array(1,\@xmldocuments) || die "Cannot bind parameter array: $DBI::errstr"; $sth->execute_array({ArrayTupleStatus=>\@status}) || die "Cannot bulk insert into table: $table: $DBI::errstr"; $log->write("Inserted $status rows into table: $table"); }

sub save_xml {
$log->write("Inserting XML messages into table:$table, in $mode: mode"); my @status; my $sql='INSERT INTO ' . $table . ' (XMLCONTENT) VALUES (?)'; my $sth = $dbh->prepare_cached($sql) || die "Cannot prepare statement: $DBI::errstr"; $sth->bind_param_array(1,\@xmldocuments,{ ora_type => ORA_XMLTYPE }) || die "Cannot bind parameter array: $DBI::errstr"; $sth->execute_array({ArrayTupleStatus=>\@status}) || die "Cannot bulk insert into table: $table: $DBI::errstr"; $log->write("Inserted $status rows into table: $table"); }

+0

您正在使用哪個版本的DBD :: Oracle? – collapsar

+0

你嘗試過'INSERT INTO'嗎? $表。 '(XMLCONTENT)VALUES(XMLTYPE(?))'或'INSERT INTO'。 $表。 '(XMLCONTENT)VALUES(XMLPARSE(CONTENT?WELLFORMED))''然後將您的XML作爲CLOB發送? –

+0

@collapsar版本1.74 – user3676476

回答

1

我無法得到大量綁定使用二進制XMLTYPE工作。但是,使用下面的代碼逐行處理可以滿足我的要求:

sub save_xml{ 
    my ($xml) = @_; 
    $log->write("Inserting XML message into table:$table, in $mode mode"); 
    my $sql='INSERT INTO ' . $table . ' (XMLCONTENT) VALUES (:xml)'; 
    my $sth = $dbh->prepare_cached($sql); 
    if ($mode eq "BINARY") { 
     $sth-> bind_param(":xml", $xml, { ora_type => ORA_XMLTYPE }); 
    } else { 
     $sth-> bind_param(":xml", $xml); 
    } 
    $sth->execute() || die "Error whilst inserting into table: $table: $DBI::errstr"; 
    $log->write("Insert into table:$table successful"); 
}