【问题标题】:Difference between fetchrow_array and fetchall_arrayref when working with stored procedures使用存储过程时 fetchrow_array 和 fetchall_arrayref 之间的区别
【发布时间】:2016-09-22 15:18:50
【问题描述】:

我最近使用两者来获取存储过程的结果。我注意到 fetchrow_array 返回我在存储过程中选择的行的输出。而 fetchall_arrayref 返回最后一行中存储过程的状态,以及存储过程中选定的行。

为什么我们会有这种差异,有没有办法避免在 fetchall_arrayref 中获取存储过程的状态?

我的存储过程

    CREATE PROCEDURE [dbo].[check_date_proc]
       @dateStart DATETIME
AS
BEGIN
SELECT
       check_date
FROM
       date_Table

WHERE
       data_date = @dateStart
END;

GO

我这样称呼它

exec check_date_proc '20160920';

fetchrow_array 返回

20160920

fetchall_arrayref 返回

20160920
0

谢谢

【问题讨论】:

  • 您能否举例说明您正在执行的查询以及输出的内容?它可能会帮助其他人在谷歌上寻找解决方案。
  • fetchrow_array 只返回一行(因此得名)。如果你这样做会发生什么while (my @row = $sth->fetchrow_array) { print "@row\n"; }
  • 我在做while (my @aData = $rQuery->fetchrow_array()) { print $rOutputHandler join(',',@aData)."\n"; }
  • 您使用的是哪个数据库?尝试以哈希的形式获取行(因为存储过程的状态必然会使用与行的列名不同的键)。

标签: sql-server perl stored-procedures dbi


【解决方案1】:

根据您使用的数据库类型(以及 Perl DBD 驱动程序),您可能会获得多个结果集。

有一种方法可以处理多个结果集(例如,如果您执行了两条导致两个结果集的语句;并且您想要两个结果集)。

查看here 获取示例代码。

由于在您的情况下,您想忽略存储过程的状态,您可能会觉得将结果作为散列获取很方便(一次拉取所有行或一一提取),然后使用获取数据的列名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多