2016-09-22 53 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的示例代碼。

因爲,在你的情況下,你想忽略存儲過程的狀態,你可能會覺得方便只是將結果作爲散列(一個拉或所有行一個接一個地),然後使用要獲取數據的列的名稱。

相關問題