【问题标题】:How to return multiple records from a result set?如何从结果集中返回多条记录?
【发布时间】:2018-06-02 03:02:13
【问题描述】:

我正在使用 perl dbi 并获取 sql 结果,但它是以数组的形式出现的。问题是,它只返回 1 个数组元素。我试图推动获得下一个元素,但什么也没有。我确信(使用其他工具)我可以看到不止一个值。它是(来自其他工具)我得到多个 ddls。通过我的查询,我只得到其中一个。这是我的查询:

my $rows = $dbh->selectall_arrayref
                  ("show SELECT * FROM TABLE
                   INNER JOIN TABLE1 
                   ON bla bla ;");

my $len = @$rows;
print  $len;
foreach $h (@$rows) {
    $st = $h->[0];
    $st =~ s/(\d),(\d)/\1|\2/g;
    @lines = split/,/,$st;
    foreach $x (@lines) {
        print FH $x . "\n";
    }
}

我的问题是如何移动相同的数组并从同一行获取下一个结果集?谢谢!

以上代码的结果如下:

主索引 (ProcID,CollectTimeStamp);ONE)NICODE NOT CASESPECIFIC,,OT NULL,C,

我不认为它带回了整个内容,不知何故它不完整

【问题讨论】:

  • @lines 来自哪里?您使用什么数据库驱动程序?你如何填充$rows
  • 对不起,我错过了一些代码。我正在拆分它:@lines = split/,/,$st;由于第一个结果来自一条线,我正在打破部分。我正在使用 Teradata ODBC 驱动程序,'dbi:ODBC.我正在填充 selectall_arrayref($sql) 并且我也尝试过:fetch_all_array。谢谢!
  • 请相应地更新问题中的代码。
  • 我已经编辑了您的代码以添加一些缩进(和一点空格)。不客气,但请以后自己做。良好的缩进是帮助人们(包括您!)理解您的代码的重要工具。如果您要让一大群陌生人阅读和理解您的代码,那么让他们尽可能简单是礼貌的做法。
  • 你可能想要for my $st ( @$h ) { ... } ,但是用这么小的代码样本和没有数据很难分辨。

标签: perl teradata dbi


【解决方案1】:

[这可能算作“不是答案”,但我正在尝试从 OP 中提取更多有用的信息,向他展示我希望他在答案中运行的代码要容易得多]

我们仍然真的不知道你想在这里做什么。而且,老实说,我不相信你会这样做:-)

让我们看看原始数据 - 没有您添加的任何处理。请尝试运行以下代码,然后edit your question 添加输出(如果返回多行,则只需包括一对)。

my $rows = $dbh->selectall_arrayref
                  ("show SELECT * FROM TABLE
                   INNER JOIN TABLE1 
                   ON bla bla ;");

foreach my $row (@$rows) {
  print join(' / ', @$row), "\n";
}

那么,请告诉我们(以这些行为例)您想要什么输出。

【讨论】:

  • 我已经问过类似的问题in a comment。他们说它只打印一条记录 (scalar(@$rows) == 1)。
  • 还要添加我的“显示”命令的查询结果应该是两个 DDL,即两个带有所有列索引等的创建表语句。谢谢!
  • @AftabKhan:你为什么忽略我的请求?
  • @DaveCross,很抱歉我没有看到你的帖子。这是故意的。下次我将遵循您推荐的缩进,我没有发布所有查询的唯一原因是避免任何专有问题,因为某些代码可能会暴露并违反公司的某些准则。无论如何,我认为 SELECTALL_ARRAYREF 没有正确处理我的请求。还有什么我可以尝试的吗?谢谢
  • @AftabKhan:你没有看到我的帖子,但你回复了它。这似乎......不太可能:-) selectall_arrayref() 似乎不太可能不适用于您的问题,因为它适用于宇宙中的所有其他查询,永远!当然,还有许多其他 DBI 方法可用于获取查询结果,但我怀疑它们都会以完全相同的方式被破坏。如果您不想与我们分享您的查询输出,那么恐怕我无法为您提供更多帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 2010-12-22
  • 2022-01-11
相关资源
最近更新 更多