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

在PostgreSQL存储过程中使用SELECT INTO时目标表不被识别的问题

问题解决:PL/pgSQL存储过程中用SELECT INTO建表失败的问题

问题原因

在PL/pgSQL块中,SELECT INTO的作用是将查询结果赋值给变量,而非纯SQL环境中用来创建新表的语法。直接把表名写在INTO后面时,PL/pgSQL会将其识别为未声明的变量,抛出"not a known variable"错误;如果声明成varchar变量,只会把查询结果的单个值(若查询返回多行还会报错)赋值给变量,完全达不到建表目的。

解决方案

在PL/pgSQL存储过程中创建新表,应使用CREATE TABLE ... AS SELECT语法,这是正确的建表方式。

修改后的存储过程代码

create or replace procedure gla_first_step()
language plpgsql
as $$
begin
    -- 如需每次执行重建表,可取消下方注释(根据需求调整)
    -- DROP TABLE IF EXISTS TBL_bkmvdata_131_B110_L0;
    
    CREATE TABLE TBL_bkmvdata_131_B110_L0 AS
    select *,
        CASE 
            WHEN B110TrialBalanceCodeText1406 LIKE N'%DATA%' 
                OR B110TrialBalanceCodeText1406 LIKE '%EXPENSE%' 
                OR B110TrialBalanceCodeText1406 LIKE '%INCOME%' 
            THEN 'P' 
            ELSE 'B' 
        END as accountType
    from TBL_bkmvdata_131_B110;
end;
$$;

关键说明

  1. 语法替换:用CREATE TABLE 新表名 AS SELECT ...替代原SELECT ... INTO 新表名 FROM ...,确保PL/pgSQL执行建表逻辑。
  2. CASE语句优化:原CASE条件存在重复判断(多次重复LIKE N'%DATA%'),已简化为合并后的逻辑,效果一致且更简洁。
  3. 表存在处理:若需要每次执行存储过程都重建表,可取消注释DROP TABLE IF EXISTS语句,避免因表已存在而报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:42:11