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

