我将 Perl DBI 与 DBD::Informix 一起使用,但我怀疑确切的数据库对这个问题并不重要。底线:我正在寻找一种批量插入方法,我可以在一次调用中将哈希 [of hashes] 的内容插入到表中。
评论:
我已经迷上了 Perl DBI 方法fetchall_hashref()
,在其中我可以运行查询并一次调用将整个受祝福的活动集(可能是数千行)提取到散列中。
我正在阅读这两个模块上的 POD,在插入语句或 PUT 调用中寻找与此等效的内容,例如 putall_hashref() 方法。我发现最好的是一个简单的单行插入,我已经准备了一个 INSERT 语句与?占位符,然后执行 PREPAREd 语句。我使用了 ESQL/C(和 Informix-4GL)中可用的 PUT 游标,但即使这些游标仍然是一行。
我需要一个质量插入方法。
那里有这样的方法,但我错过了?
我看到了 Shawn 和 zdim 的评论。
肖恩和兹迪姆,
当前(未经测试)代码的示例,尽管我之前使用过类似的东西:
$db_partns = $extract_smi_p->fetchall_hashref("partition");
# Pulls from temp tab in DB1
...
现在循环将上述哈希中的每一行插入到另一个数据库中的新临时表中
for my $partn (keys %$db_partns)
{
$put_statement_p->execute(@{$db_partns->{$partn}}{@partn_fields});
}
注意:@partn_fields 是一个键数组,即列名。(使用散列切片方案。)
要使用 execute_array() 我需要将每列中的所有值分成一个单独的数组。谢谢你的聪明主意;有一天我可能会使用它。但是设置它是一个比我已经在做的更丑陋的设置。