2010-12-27 2 views
0
CREATE OR REPLACE FUNCTION some_function(_limit integer, _skip integer, _sortcolumn text, _sortasc boolean) 
    RETURNS SETOF some_table AS 
$BODY$ 

begin 

return query execute 'select * from some_table order by "'||_sortcolumn||'"' ||case when _sortasc then 'asc' else 'desc' end ||' limit $1 offset $2;' using _limit, _skip; 

end; 
$BODY$ 
    LANGUAGE plpgsql STABLE SECURITY DEFINER 
    COST 100 
    ROWS 100; 

Я хочу передать параметр по ссылке, поэтому я могу назначить полные строки параметру. до сих пор я нахожу это невозможным. любое предложение? Я использую C#Как вернуть записи с полными строками, найденными в 1 функции

редактировать

я нашел 'RAISE УВЕДОМЛЕНИЕ', вероятно, полезным. все еще найти способ получить уведомление в .Net через npgsql

ответ

2

Существует несколько способов сделать это. Если вы вызываете эту функцию напрямую с помощью объекта команды, функция ExecuteScalar возвращает количество строк, возвращаемых командой.

rowCountValue = (int)command.ExecuteScalar(); 

Или вы можете сделать это в определении функции;

CREATE OR REPLACE FUNCTION some_function(_limit integer, _skip integer, _sortcolumn text, _sortasc boolean, OUT _row_count integer) 
    RETURNS SETOF some_table AS 
$BODY$ 
DECLARE 
    _result RECORD; 
BEGIN 
EXECUTE 'SELECT * FROM some_table ORDER BY "'||_sortcolumn||'"' ||case when _sortasc then 'asc' else 'desc' end ||' limit $1 offset $2;' INTO _result using _limit, _skip; 

GET DIAGNOSTICS _row_count = ROW_COUNT; 

return result; 

END; 
$BODY$ 
    LANGUAGE plpgsql STABLE SECURITY DEFINER 
    COST 100 
    ROWS 100; 

Если вы запрашиваете здание в порядке, то этот должен работать достаточно хорошо.

Надеюсь, это поможет.

1

Вы также можете попытаться изменить свою функцию, чтобы возвратить набор refcursors вместо этого, и вернуть набор результатов с подсчетом строк и другим набором ваших данных.

Ознакомьтесь с разделом «Получение полного результата в объекте DataSet: использование refcursors» из Npgsql. Руководство пользователя: http://manual.npgsql.org Там вы найдете, как это сделать.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^