2016-09-22 31 views
2

我最近使用过这两种方式来获取存储过程的结果。我注意到fetchrow_array返回我在存储过程中选择的行的输出。而fetchall_arrayref返回最后一行中存储过程的状态以及存储过程中的选定行。使用存储过程时,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 

谢谢

+2

你可以给出你正在做的查询的样子和输出的例子吗?它可能会帮助其他人获得解决方案。 – simbabque

+0

'fetchrow_array'只返回一行(因此名称)。如果你做'while(my @row = $ sth-> fetchrow_array){print“@row \ n”; }' – ThisSuitIsBlackNot

+0

我在做'while(my @aData = $ rQuery-> fetchrow_array()){$ rOutputHandler join(',',@ aData)。“\ n”; }' – Imran

回答

1

根据您使用哪种数据库类型(以及取决于Perl DBD驱动程序),很可能您正在获取多个结果集。

有一种处理多个结果集的方法(例如,如果执行了两个导致两个结果集的语句,并且您希望这两个结果集合一致)。

查看here的示例代码。

因为,在你的情况下,你想忽略存储过程的状态,你可能会觉得方便只是将结果作为散列(一个拉或所有行一个接一个地),然后使用要获取数据的列的名称。

相关问题