sql-server - Perl -- 查询获取 Not Hash Reference 时的 DBI selectall_arrayref

标签 sql-server perl dbi

我是 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/

相关文章:

c# - 循环递归自连接表

sql - 多列上的 SELECT COUNT(DISTINCT...) 错误?

sql - 显示季度可用的月份名称

perl - 在 Perl 中打印超过 ANSI 颜色值

mysql - 在 Perl DBI 中处理大量结果的最有效方法是什么?

mysql - Perl mysql mac地址错误

c# - 从项目目录中读取 SQL 查询文件

windows - cpan 与 -MCPAN - Perl

linux - Perl 升级会破坏 Linux 上的旧版本吗?

perl - 为什么DBI_TRACE中有 "0 CLEARED by call to connect method"警告?