You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何将存储过程返回的数据插入到新表中

问题原因
  • 你使用的exec是SQL Server的存储过程调用语法,PostgreSQL不支持该关键字,这是你触发语法报错的直接原因。
  • 更核心的逻辑问题是:你当前编写的PL/pgSQL存储过程里仅执行了SELECT语句,不会把查询的结果集返回给调用方,即使语法修正也无法直接拿到结果插入到Customer表。
解决方案

方案1:无需存储过程,直接执行插入(推荐,最简洁)

如果没有必须封装为存储过程的要求,直接通过查询插入即可完成需求:

  • 若Customer表已存在:
INSERT INTO public.Customer
SELECT * FROM public.customer_list;
  • 若Customer表还未创建,可一步完成建表+数据插入:
CREATE TABLE public.Customer AS
SELECT * FROM public.customer_list;

方案2:改写为返回结果集的函数后插入

如果需要把查询逻辑封装复用,可以把存储过程改为返回结果集的函数:

  1. 改写函数代码:
CREATE OR REPLACE FUNCTION test()
-- 此处直接复用视图customer_list的行结构,也可自定义列结构:RETURNS TABLE(列名1 类型, 列名2 类型...)
RETURNS SETOF public.customer_list
LANGUAGE plpgsql
AS $$
BEGIN
  RETURN QUERY SELECT * FROM public.customer_list;
END;
$$;
  1. 执行插入语句:
INSERT INTO public.Customer
SELECT * FROM test();

方案3:把插入逻辑直接封装到存储过程中

如果必须使用存储过程实现,可以直接把插入逻辑写在存储过程内部,调用时直接执行即可:

  1. 改写存储过程代码:
CREATE OR REPLACE PROCEDURE test()
LANGUAGE plpgsql
AS $$
BEGIN
  INSERT INTO public.Customer
  SELECT * FROM public.customer_list;
END;
$$;
  1. 调用存储过程执行插入:
CALL public.test();

内容的提问来源于stack exchange,提问作者Sriram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:36:03