perl - Perl DBI:在单个调用中插入整个哈希,补充 fetchall_hashref()
问题描述
我将 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() 我需要将每列中的所有值分成一个单独的数组。谢谢你的聪明主意;有一天我可能会使用它。但是设置它是一个比我已经在做的更丑陋的设置。
解决方案
推荐阅读
- webpack - 网站的 Webpack 配置
- html - 更改弹出窗口的默认关闭按钮
- javascript - Express:如果 JSON 中不存在对象,如何返回 404?
- pipenv - 使用 pipenv 时如何通过结帐更新和切换分支?
- matplotlib - 使用自定义处理程序时忽略 matplotlib 图例参数
- oracle - 使用 XMLTABLE 的 LEFT OUTER JOIN 不起作用?
- powerbi - 为什么在power bi desktop中多次调用OData api
- mysql - SQL 从 c1.fieldA 到 c2.fieldB 比较当等于某个值时
- java - 将 MailosaurClient 与 java 一起使用时出现错误 PKIX 路径构建失败
- laravel - JQuery DataTables:服务器端搜索功能因 SQL 错误而中断