【发布时间】:2015-12-22 09:59:05
【问题描述】:
我正在使用 Perl DBD::Oracle 尝试将 XML 字符串数组批量插入到 Oracle XMLTYPE 列中。如果我批量插入到 CLOB 中,我可以让它工作,但是当我尝试通过 Strawberry Perl 插入到 XMLTYPE 列中时,它会崩溃。
有人可以从 Perl 批量插入 XMLTYPE 吗?
这里是sn-ps的两个代码。一个用于 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");
}
【问题讨论】:
-
您使用的是哪个版本的 DBD::Oracle?
-
您尝试
'INSERT INTO ' . $table . ' (XMLCONTENT) VALUES (XMLTYPE(?))'或INSERT INTO ' . $table . ' (XMLCONTENT) VALUES (XMLPARSE(CONTENT ? WELLFORMED))'然后将您的XML 作为CLOB 发送? -
@collapsar 1.74 版
-
@WernfriedDomscheit 我收到来自 Oracle 的错误 ora01461 can't bind a LONG only for insert into a LONG column。我想我肯定需要类型减速
-
$sth->bind_param_array(1,\@xmldocuments,{ ora_type => ORA_CLOB })是否也出现同样的错误?