获取存储过程refcursor输出并插入到临时表中



我有一个存储过程(P1),它返回一个refcursor和其他几个文本数据类型值。我有另一个过程(P2),我需要获取P1的refcursor输出并将其插入临时表。临时表具有匹配的列和数据类型。

create or replace procedure P1(inout rfcur refcursor, in dtl text)
as
$$
begin
open rfcur for select * from tst_dump where ident = dtl;
end;
$$
language plpgsql;
create or replace P2(inout rfc refcursor, in dt_array text[])
as
$$
declare
i record;
cur refcursor;
begin
for i in array_lower(dt_array, 1)..array_upper(dt_array, 1) loop
call P1(cur, i);
--I need to fetch the result set from `cur` and store into a temp table `t_tab1`.
end loop;
end;
$$
language plpgsql;

是否有可能在Postgres中实现这一点?

注意:我不应该对过程P1做任何改变。

p2可以像这样:

CREATE PROCEDURE p2(IN dt_array text[])
LANGUAGE plpgsql AS
$$DECLARE
r record;
i integer;
cur refcursor;
BEGIN
FOR i IN array_lower(dt_array, 1)..array_upper(dt_array, 1) LOOP
CALL p1(cur, i::text);
LOOP
FETCH cur INTO r;
EXIT WHEN NOT FOUND;
INSERT INTO t_tab1 (...) VALUES (r.col1, r.col2, ...;
END LOOP;
END LOOP;
END;$$;
你应该缩进你的代码。这是编程时的基本要求。 在我看来,你做事的方式似乎不对。使用过程和游标会使一切变得复杂,使程序运行速度变慢。

你应该这样做

INSERT INTO t_tab
SELECT /* your original query */;

相关内容

  • 没有找到相关文章

最新更新