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#を使用しています

編集

「RAISE NOTICE」がおそらく役立つことがわかりました。npgsqlを介して.Netで通知を受け取る方法をまだ見つけています

4

2 に答える 2

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;

クエリの作成に問題がなければ、これは非常にうまく機能するはずです。

お役に立てれば。

于 2010-12-27T15:53:44.040 に答える
1

また、代わりに refcursors のセットを返すように関数を変更して、行数を含む結果セットとデータを含む別のセットを返すこともできます。

Npgsql ユーザーズ マニュアルの「Getting full results in a DataSet object: Using refcursors」セクションを参照してください: http://manual.npgsql.orgそこにその方法があります。

お役に立てば幸いです。

于 2011-01-02T15:17:04.873 に答える