Perl DBI:在单个调用中插入一个完整的散列,作为fetchall_hashref()的补充
我将Perl DBI与DBD::Informix一起使用,但我怀疑确切的数据库对于这个问题并不重要。一句话:我正在寻找一种大规模插入方法,在这种方法中,我可以在一次调用中将散列的内容插入到一个表中 评注: 我迷恋Perl DBI方法Perl DBI:在单个调用中插入一个完整的散列,作为fetchall_hashref()的补充,perl,insert,dbi,hashref,Perl,Insert,Dbi,Hashref,我将Perl DBI与DBD::Informix一起使用,但我怀疑确切的数据库对于这个问题并不重要。一句话:我正在寻找一种大规模插入方法,在这种方法中,我可以在一次调用中将散列的内容插入到一个表中 评注: 我迷恋Perl DBI方法fetchall_hashref(),在该方法中,我可以运行查询并在一次调用中将整个活动集(可能是数千行)提取到一个哈希中 我正在阅读这两个模块上的POD,在insert语句或PUT调用中寻找与此等效的内容,类似于putall_hashref()方法。我发现最好的方法
fetchall_hashref()
,在该方法中,我可以运行查询并在一次调用中将整个活动集(可能是数千行)提取到一个哈希中
我正在阅读这两个模块上的POD,在insert语句或PUT调用中寻找与此等效的内容,类似于putall_hashref()方法。我发现最好的方法是一个简单的单行插入,在这里我准备了一个insert语句?占位符,然后执行准备好的语句。我使用了ESQL/C(和Informix-4GL)中可用的PUT游标,但即使是这些游标,每次也只有一行
我需要一个质量插入方法
有没有这样的方法,但我错过了?
我看到Shawn和zdim的评论
肖恩和兹迪姆
当前(未测试)代码的示例,尽管我以前使用过类似的东西:
$db_partns = $extract_smi_p->fetchall_hashref("partition");
# Pulls from temp tab in DB1
现在循环将上面散列中的每一行插入另一个DB中的新临时表
注意:@partn_fields是一个键数组,即列名。(使用哈希切片方案。)
要使用execute_array(),我需要将每列中的所有值分隔成一个单独的数组。谢谢你的好主意;总有一天我会用的。但是设置这个设置比我现在已经做的还要难看。显示数据示例以及如何插入数据。insert语句占用多行,但我们需要查看您所拥有的以及想要的内容。我认为
execute\u array()
是最接近的可用语句。或者执行\u for_fetch()
。显示数据示例以及如何立即插入数据。insert语句占用多行,但我们需要查看您所拥有的以及想要的内容。我认为execute\u array()
是最接近的可用语句。或者为\u fetch()执行\u
。
for my $partn (keys %$db_partns)
{
$put_statement_p->execute(@{$db_partns->{$partn}}{@partn_fields});
}