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

Redshift存储过程使用for loop遭遇JDBC驱动内部错误求助

Redshift存储过程FOR循环触发JDBC内部错误解决办法

问题重现

在Redshift中编写PL/pgSQL存储过程,通过FOR循环遍历public.employee表的ID并输出时,触发错误:SQL Error: Internal jdbc driver error。使用DBeaver开发,尝试给查询添加括号后问题仍未解决。

存储过程代码:

create or replace procedure public.for_loop_test()
language plpgsql
as 
$$
declare i record;
begin 
    for i in select id from public.employee
    loop
        raise info 'Values-%',i.id;
    end loop;
end;
$$;

调用语句:

call public.for_loop_test(); 

解决办法

1. 严格遵循Redshift FOR循环语法

Redshift的PL/pgSQL对FOR循环的查询语句有明确要求,必须将查询用括号包裹(检查括号是否正确包裹完整查询):

create or replace procedure public.for_loop_test()
language plpgsql
as 
$$
declare i record;
begin 
    for i in (select id from public.employee)
    loop
        raise info 'Values-%',i.id;
    end loop;
end;
$$;

2. 更新DBeaver中的Redshift JDBC驱动

旧版本的Redshift JDBC驱动可能存在PL/pgSQL语法解析bug,导致内部错误。更新步骤:

  • 打开DBeaver的数据库连接设置
  • 切换到「驱动」标签页
  • 点击「更新」按钮,安装最新版本的Redshift JDBC驱动后重新测试

3. 改用显式游标替代FOR循环

如果上述方法无效,尝试用显式游标实现相同逻辑,规避可能的语法解析问题:

create or replace procedure public.for_loop_test()
language plpgsql
as 
$$
declare 
    emp_cursor cursor for select id from public.employee;
    emp_id int;
begin 
    open emp_cursor;
    loop
        fetch emp_cursor into emp_id;
        exit when not found;
        raise info 'Values-%',emp_id;
    end loop;
    close emp_cursor;
end;
$$;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:42:09