【问题标题】:How to retrieve result set from postgres stored procedure(or function) using pg如何使用 pg 从 postgres 存储过程(或函数)中检索结果集
【发布时间】:2021-02-09 21:17:21
【问题描述】:

您好,我正在开发一个使用 postgres 的 Web 应用程序,其中一些 sql 位于存储过程/函数中。如果一个函数返回一个游标,我们如何在 nodejs 中检索和处理结果集?我正在使用 pg (node-postgres)。以下是我想从 nodejs 代码中调用的测试过程的代码。

drop table if exists tmp;
create table tmp
(
  x integer
);
drop function if exists t1;

create or replace function t1( p_value integer)
returns refcursor
language plpgsql
as $$
declare
  ref refcursor;
begin
  --insert into tmp(x) values(p_value);
  open ref for select x from tmp;
  return ref;
end
$$;

【问题讨论】:

  • 把它改成一个集合返回函数,你的生活会轻松很多。你甚至不需要 PL/pgSQL。
  • 嗨,我的目标是返回结果集,以便我可以在中间层逐行处理它。这可以从其他语言中实现。我想知道 nodejs pg 是否允许这样做。

标签: node.js postgresql pg node-postgres


【解决方案1】:

这不是在 Postgres 中完成的。将其更改为集合返回函数:

create or replace function t1(p_value integer)
   returns table (x integer) --<< adjust here for the real column list
language sql
as $$
  insert into tmp(x) values(p_value)
  returning x; --<< adjust here for the real column list
$$;

然后将其用作 SELECT 语句的一部分:

select *
from t1(42);

显然42 可以是您的编程语言中的参数。

【讨论】:

  • 谢谢。如果没有插入语句(您从中返回集合,您将如何做?稍后我将使用“table”返回方法尝试此操作,如果可行,将确认这是答案。
  • 除了 INSERT 之外,您还有什么?
  • 嗨,想象一下没有插入的过程。数据已插入别处,我需要检索数据。
  • 然后使用SELECT
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2011-11-14
  • 1970-01-01
  • 2015-08-22
相关资源
最近更新 更多