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

如何在Oracle SQL Developer中获取PL/SQL存储过程的结果集

解决Oracle SQL Developer中存储过程结果集无法显示的问题

步骤1:修正存储过程的语法错误

你的存储过程存在一处语法错误:赋值语句里的 v_sql:-'select...' 应改为 v_sql := 'select...'(PL/SQL的标准赋值运算符是 :=)。修正后的完整存储过程代码如下:

CREATE OR REPLACE PROCEDURE SP_GETDATA(
id in number,
result_cursor out sys_refcursor
)AS
BEGIN
DECLARE v_sql varchar2(2000);
BEGIN
     v_sql := 'select * from(select col1,col2,col3 from tab1) 
     pivot (max(col3) for col1 in(';
for i in (select col1 from tab2)
LOOP
    v_sql:=v_sql||i.col1||',';
END LOOP;
    v_sql:=RTRIM(v_sql,',')||')) ORDER BY col2';
    OPEN result_cursor for v_sql;
END;
END ;
/

执行这段代码重新编译存储过程,确保无编译报错。

步骤2:使用正确方式调用并显示结果集

方法A:用DBMS_SQL.RETURN_RESULT强制返回结果

通过匿名块调用存储过程,借助DBMS_SQL.RETURN_RESULT让SQL Developer直接展示游标结果:

DECLARE
  v_cursor SYS_REFCURSOR;
BEGIN
  SP_GETDATA(1, v_cursor);
  DBMS_SQL.RETURN_RESULT(v_cursor);
END;
/

执行后SQL Developer会自动弹出结果集窗口。

方法B:在脚本模式下执行原调用命令

如果坚持使用VARIABLE+PRINT的方式,必须按**F5(Run Script)**执行以下代码,而非Ctrl+Enter(Run Statement):

VARIABLE cursor_test refcursor;
exec SP_GETDATA(1,:cursor_test);
print cursor_test;

Run Statement仅执行单条语句,无法按顺序完成变量声明、存储过程调用和结果打印,而Run Script会按脚本逻辑完整执行。

额外验证点

  • 可以在存储过程中添加DBMS_OUTPUT.PUT_LINE(v_sql);,开启SET SERVEROUTPUT ON;后执行调用,查看生成的动态SQL语句,复制后直接执行确认是否有结果。
  • 当前存储过程的id参数未参与动态SQL生成,若业务需要用该参数过滤数据,需在动态SQL中加入对应条件(如where id = '||:id),并在打开游标时绑定参数:OPEN result_cursor for v_sql using id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:45:37