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。到目前为止我发现它是不可能的有什么建议吗?我正在使用C#
修改
我发现'RAISE NOTICE'可能很有用。仍然找到一种方法通过npgsql
接收.Net中的通知答案 0 :(得分: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 :(得分:1)
您也可以尝试更改函数以返回一组refcursors,并返回带有行数的结果集和带有数据的另一组。
查看“在DataSet对象中获取完整结果:使用refcursors”部分来自Npgsql用户手册:http://manual.npgsql.org您将在那里找到如何做到这一点。
我希望它有所帮助。