我最近使用两者来获取存储过程的结果。我注意到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
由于
答案 0 :(得分:1)
根据您使用的数据库类型(并且取决于Perl DBD驱动程序),您可能会获得多个结果集。
有一种处理多个结果集的方法(例如,如果你执行了两个导致两个结果集的语句;并且你想要两个结果集)。
查看here示例代码。
因为在你的情况下,你想要忽略存储过程的状态,你可能觉得将结果作为哈希(一个拉中的所有行或每个一个一个地获取)都很方便,然后使用获取数据的列的名称。