2010-12-27 11 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; 

パラメータを参照渡ししたいので、合計行をparamに割り当てることができます。これまで私はそれが不可能だと思っています。なにか提案を?私は 'RAISE注意' は、おそらく有用であることが分かっC#1行にある合計行数のレコードを返す方法

編集

を使用しています。まだnpgsql経由で.Netの通知を受信する方法を見つける

答えて

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; 

建物を照会するとOKですが、これは非常にうまくいくはずです。

これが役に立ちます。

1

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

Npgsqlユーザーズ・マニュアルの「Refcursorsを使用してDataSetオブジェクトで完全な結果を取得する」セクションを参照してください。これを行う方法が見つかります。

私はそれが役に立ちそうです。

関連する問題