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

如何在SQL Developer中显示REF CURSOR的结果集?

解决SQL Developer调用存储过程仅显示列名无数据的问题

1. 切换执行方式

在SQL Developer中,不要用「Run Script」(F5)执行代码,改用「Run Statement」(Ctrl+Enter)执行以下代码:

variable Out_Ref_Cursor refcursor;
EXECUTE test_proc(:Out_Ref_Cursor);
print :Out_Ref_Cursor;

结果会在「Query Result」标签页以表格形式完整显示,而非仅在Script Output中显示列名。

2. 调整Script Output显示设置

若坚持使用Run Script:

  • 打开工具 -> 首选项 -> 数据库 -> 脚本输出
  • 勾选「显示输出」,并将「最大输出行数」设为大于48的数值
  • 确认「格式」选项未限制结果内容显示

3. 修正PL/SQL块代码

你尝试的PL/SQL块存在语法错误,且dbms_output.put_line无法直接打印游标对象,需遍历游标输出数据。示例代码(需根据test_table实际列调整变量):

DECLARE
  Out_Ref_Cursor SYS_REFCURSOR;
  v_id NUMBER;
  v_name VARCHAR2(50);
BEGIN
  test_proc(Out_Ref_Cursor);
  LOOP
    FETCH Out_Ref_Cursor INTO v_id, v_name;
    EXIT WHEN Out_Ref_Cursor%NOTFOUND;
    dbms_output.put_line('id: ' || v_id || ', name: ' || v_name);
  END LOOP;
  CLOSE Out_Ref_Cursor;
END;
/

执行后开启DBMS输出即可看到每条记录内容。

4. 验证用户权限

确认当前用户对test_table拥有SELECT权限,可直接执行SELECT * FROM test_table;验证是否能获取数据,排除会话权限异常问题。


原问题描述

在SQL Developer中调用存储过程查看返回结果集时,「Script Output」标签页仅显示列名,看不到实际数据;相同代码在Toad中可在「Grid」标签正常显示test_table的48条记录。

存储过程代码

create or replace PROCEDURE test_proc (
                          r_recordset      OUT SYS_REFCURSOR)
    IS
      sql_stmt   CLOB := NULL;
    
    BEGIN
      sql_stmt := 
        'select * from test_table';
      OPEN r_recordset FOR sql_stmt;
    END;

执行代码

set serveroutput on;
variable Out_Ref_Cursor refcursor;
EXECUTE test_proc(:Out_Ref_Cursor);
print :Out_Ref_Cursor;

已开启DBMS输出,缓冲区大小设为20000,但输出窗口无内容,尝试相关方案未解决;还尝试了存在语法错误的PL/SQL块,同样无效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:25:22