Как вернуть записи с общим количеством строк, найденных в 1 функции - PullRequest
0 голосов
/ 27 декабря 2010
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 #

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

Мне показалось, что «ПОДНИМАТЬ УВЕДОМЛЕНИЕ», вероятно, полезно. все еще найти способ получения уведомления в .Net через npgsql

Ответы [ 2 ]

2 голосов
/ 27 декабря 2010

Есть несколько способов сделать это.Если вы вызываете эту функцию напрямую, используя объект команды, функция 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 голос
/ 02 января 2011

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

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

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

...