【问题标题】:How to return records with total rows found in 1 function如何返回在 1 个函数中找到总行数的记录
【发布时间】:2010-12-27 09:29:44
【问题描述】:
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 中找到接收通知的方法

【问题讨论】:

    标签: c# sql postgresql npgsql


    【解决方案1】:

    有几种方法可以做到这一点。如果直接使用命令对象调用此函数,则 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;
    

    如果你查询建筑没问题,那么这个应该工作得很好。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您也可以尝试将您的函数更改为返回一组 refcursors,并返回一个包含您的行数的结果集和另一个包含您的数据的集合。

      查看 Npgsql 用户手册中的“在 DataSet 对象中获取完整结果:使用 refcursors”部分:http://manual.npgsql.org 在那里你会找到如何做到这一点。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 2015-07-12
        • 2011-08-03
        • 1970-01-01
        相关资源
        最近更新 更多