我是 perl 的新手(但来自 c# 背景),我正在尝试将一些脚本移动到 Windows 框。 由于某些模块不能轻松地与 Windows 一起工作,我改变了它连接到数据库的方式。 我有一个 sqlserver 数据库,我有一个循环读取表中的每一行,然后在这个循环中发送另一个查询以选择不同的信息。 我是在同一个连接中不能同时执行两个语句的错误。 由于我的连接对象是全局的,因此我找不到解决此问题的简单方法,因此决定使用以下方法将第一组数据存储在数组中:
my $query = shift;
my $aryref = $dbh->selectall_arrayref($query) || die "Could not select to array\n";
return($aryref);
(这是在被调用的模块文件中)
然后我执行一个 foreach 循环(其中 @$s_study 是上面返回的 $aryref)
foreach my $r_study ( @$s_study ) {
~~~
my $surveyId=$r_study->{surveyid}; <-------error this line
~~~~
};
当我运行它时,出现错误“不是哈希引用”。我不明白?! 谁能帮忙!
行为
最佳答案
您需要向 selectall_arrayref
提供 { Slice => {} }
参数如果您希望将每一行存储为散列:
my $aryref = $dbh->selectall_arrayref($query, { Slice => {} });
默认情况下,它返回对数组的引用,其中包含对获取的每一行数据的数组的引用。
关于sql-server - Perl -- 查询获取 Not Hash Reference 时的 DBI selectall_arrayref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862563/