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

JMeter执行PostgreSQL存储过程报错:游标'refcur'不存在

PostgreSQL存储过程调用报错:游标"refcur"不存在的问题解决

问题根源

你直接在调用语句里传字符串'refcur'作为游标参数,但PostgreSQL会把这个字符串当作已存在的游标名称去查找,而你并没有提前声明这个游标,所以触发了"cursor does not exist"的错误。

正确调用方式分两种情况处理

情况1:存储过程用输出参数定义游标

如果你的存储过程是通过OUT类型的refcursor参数返回结果,比如存储过程定义类似:

CREATE OR REPLACE PROCEDURE appoagetincorrecthintitems(
    p_user_id INT,
    OUT result_cursor REFCURSOR
)
LANGUAGE plpgsql AS $$
BEGIN
    OPEN result_cursor FOR 
        SELECT * FROM your_table WHERE user_id = p_user_id;
END;
$$;

那JDBC Sampler的调用语句要改成:

CALL appoagetincorrecthintitems(3236006, ?);

然后在JDBC Sampler的「参数」配置里添加一条参数:

  • 参数值留空
  • 参数类型选择REF_CURSOR
  • 参数方向设置为OUT

这样JDBC驱动会自动处理游标,帮你获取存储过程返回的结果集。

情况2:存储过程要求传入游标名并手动打开

如果存储过程逻辑是需要你传入游标名,再由存储过程打开它,那你需要在同一个数据库会话中先声明游标,再调用存储过程,最后获取结果。具体步骤:

  1. 在JDBC Sampler的「Connection Configuration」里关闭「Auto Commit」
  2. 把以下语句放在同一个JDBC Request中执行:
BEGIN;
DECLARE refcur REFCURSOR;
CALL appoagetincorrecthintitems(3236006, 'refcur');
FETCH ALL FROM refcur;
COMMIT;

这种方式需要手动管理事务,不如第一种方式简洁,建议优先采用输出参数的调用模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:02:05