您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

PostgreSQL在表函数中参数化了“排序依据/限制”

PostgreSQL在表函数中参数化了“排序依据/限制”

plpgsql函数对于更复杂的东西没有任何问题。可能会影响性能的唯一情况是嵌套plpgsql函数时,因为查询计划程序无法在外部查询的上下文中进一步优化所包含的代码,这可能会使速度变慢,也可能不会使其变慢。 在此稍后的答案中有更多详细信息:

Postgresql函数中的语言sql和语言plpgsql间的区别 在这种情况下,它比CASE查询中的许多子句简单得多:

CREATE OR REPLACE FUNCTION get_stuff(_param text, _orderby text, _limit int)
  RETURNS SETOF stuff AS
$func$
BEGIN
   RETURN QUERY EXECUTE '
      SELECT *
      FROM   stuff
      WHERE  col = $1
      ORDER  BY ' || quote_ident(_orderby) || ' ASC
      LIMIT  $2'
   USING _param, _limit;
END
$func$  LANGUAGE plpgsql;

称呼:

SELECT * FROM get_stuff('hello', 'col2', 100);

笔记 用于RETURN QUERY EXECUTE一次性返回查询结果。

使用quote_ident()标识符反对sqlI保障。 或format()更复杂的事情。看:

表名作为Postgresql函数参数 将参数值与USING子句一起传递,以避免再次进行强制转换,引号和sqli。

注意不要在参数和列名之间创建命名冲突。_在示例中,我在参数名称添加了下划线()。只是我个人的喜好。

编辑后的第二个函数无法工作,因为您只能parent在声明返回类型时返回SETOF stuff。您可以声明自己喜欢的任何返回类型,但是实际的返回值必须与声明匹配。您可能想要使用RETURNS TABLE它。

SQLServer 2022/1/1 18:26:51 有387人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶