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
相关产品推荐
相关产品推荐

