2016-09-22 10 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 

Thanks

+2

Можете ли вы привести примеры того, как будет выглядеть запрос, и выход? Это может помочь другим google для решения. – simbabque

+0

'fetchrow_array' возвращает только одну строку (отсюда и название). Что произойдет, если вы сделаете 'while (my @row = $ sth-> fetchrow_array) {print" @row \ n "; } ' – ThisSuitIsBlackNot

+0

Я делаю' while (my @aData = $ rQuery-> fetchrow_array()) { print $ rOutputHandler join (',', @ aData). "\ N"; } ' – Imran

ответ

1

В зависимости от типа базы данных, с которой вы работаете (и в зависимости от драйвера DBD Perl), вполне вероятно, что вы получаете несколько наборов результатов.

Существует способ обработки нескольких наборов результатов (например, если вы выполнили два утверждения, которые привели к двум наборам результатов, и вы хотите их обоих).

Посмотрите here для примера кода.

Поскольку в вашем случае вы хотите игнорировать состояние хранимой процедуры, вы можете почувствовать удобство только для получения результатов как хэшей (все строки одним движением ИЛИ каждый по одному), а затем использовать имена столбцов для получения данных.