【问题标题】:How to display the results of a ref cursor using SQL Developer如何使用 SQL Developer 显示引用游标的结果
【发布时间】:2019-06-26 11:04:27
【问题描述】:

我有一个带有多个游标的存储过程。它们被定义为 IN OUT 参数。我想使用 SQL Developer 显示游标的结果。 这是一个存储过程的例子:

SET serveroutput on;
DECLARE
         p_input_stream       VARCHAR2(200);
        p_msg_code            NUMBER;
         p_msg_parms                         VARCHAR2(200);
         p_return_code                       NUMBER;
         p_trailer_cur                    sl_globals.curtype_weak;

 BEGIN
    /* Assign values to IN parameters */
    p_input_stream := '24954286Mnull|5155035|2|436|SCAN|47720|XTRA|0105||5155035||||N|~|\r';
    p_trailer_cur := null;

EXEC TRAILER_INFO(p_input_stream, 
        p_msg_code, p_msg_parms, p_return_code, 
        p_trailer_cur)

 /* Display OUT parameters */
    dbms_output.put_line('p_msg_code: ' || p_msg_code);
    dbms_output.put_line('p_msg_parms: ' || p_msg_parms);
    dbms_output.put_line('p_return_code: ' || p_return_code);

我已经尝试创建一个 refcursor 变量并像这样使用它来代替p_trailer_cur

VARIABLE trailer_cur refcursor;
 EXEC TRAILER_INFO(p_input_stream, 
        p_msg_code, p_msg_parms, p_return_code, 
        :trailer_cur)
 print trailer_cur;

我得到错误:

SP2-0552:Bind Varialbe "trailer_cur 未声明。

变量已声明,所以我不明白错误。

【问题讨论】:

  • PL/SQL 块中的EXEC 是什么? PL/SQL 中没有这样的命令。
  • EXEC 是一个 SQLPlus 命令 - 它不是 plsql 语言的一部分

标签: plsql oracle-sqldeveloper


【解决方案1】:

SQL Developer 支持这一点的两种方式 - GUI 和代码。

图形用户界面

如果您从代码编辑器执行存储过程,请在树中找到存储过程,单击它,使用“执行”按钮 - 我们将获取您的所有输出,并在输出面板中显示如下:

你的尝试,代码:

如果您在 SQL 工作表中并且有匿名块,则可以使用 F5 运行它,包括您的打印命令。

像这样-

create or replace function get_emps(dno in number) return sys_refcursor
    is
      return_value sys_refcursor;
    begin
      open return_value for
        select * from employees where department_id = dno;
      return return_value;
    end;
    /



 var rc refcursor
 exec :rc := get_emps(90)

 print rc

【讨论】:

  • 由于我有几个要输出的参数,我想从工作表中完成。但是,当我从工作表运行它时,我收到错误:Bind Varialbe "trailer_cur is not declared. 光标是一个 IN OUT 参数。
  • @GloriaSantin 您的代码块不完整?它显示了您正在运行的一些内容,但不是所有内容?另外我无权访问 TRAILER_INFO() - 你可以试试我分享的代码吗?如果您没有 HR.EMPLOYEES 表,则将游标查询更改为您现有的任何内容
  • 如果是IN OUT参数即游标,输出游标的语法是什么?
  • ...打印它?应该是一样的,但是见stackoverflow.com/a/22505596/1156452
  • fwiw,SQLDev 为您处理任何一种方式,因为您标记了 sqldev,我向您展示了 GUI 解决方案,它实际上是“按钮”就绪
猜你喜欢
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2011-04-03
  • 2021-12-17
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多