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

PostgreSQL 13创建含临时表的存储过程报错:temp不是已知变量

问题分析与解决方案

错误原因

在PostgreSQL的PL/pgSQL存储过程中,SELECT INTO的语法逻辑和纯SQL环境存在差异:

  • 纯SQL场景下,SELECT ... INTO TEMP TABLE ...是合法语句,用于创建临时表并插入查询结果;
  • 但在PL/pgSQL中,SELECT INTO默认作用是给变量赋值,此时语句里的TEMP会被识别为一个未定义的变量名,因此触发"temp" is not a known variable的错误。

修复方案

有两种可行的修改方式:

方式1:使用CREATE TEMP TABLE ... AS SELECT(推荐)

这是PL/pgSQL中创建临时表并填充数据的标准写法,直接替换原有的SELECT INTO语句即可:

CREATE OR REPLACE PROCEDURE dbo.<proc-name>()
LANGUAGE plpgsql 
AS $$
BEGIN
    DROP TABLE IF EXISTS child;
    -- 创建临时表并插入查询结果
    CREATE TEMP TABLE child AS
    SELECT Id, Name
    FROM dbo.master;

    COMMIT;
END;
$$;

方式2:使用SELECT ... INTO TABLE语法

如果倾向于保留类似原语句的结构,可以明确指定INTO TABLE,告诉PL/pgSQL是将结果写入表而非变量:

CREATE OR REPLACE PROCEDURE dbo.<proc-name>()
LANGUAGE plpgsql 
AS $$
BEGIN
    DROP TABLE IF EXISTS child;
    -- 先创建临时表结构
    CREATE TEMP TABLE child (Id INT, Name VARCHAR);
    -- 将查询结果写入指定表
    SELECT Id, Name INTO TABLE child
    FROM dbo.master;

    COMMIT;
END;
$$;

注意:这种方式需要先手动创建临时表的结构,否则会触发表不存在的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:25:24