【问题标题】:TORA Execute Package Procedure with OUT REF CURSORTORA 使用 OUT REF CURSOR 执行包程序
【发布时间】:2011-10-24 03:06:33
【问题描述】:

我正在尝试执行一个包过程,它有几个 in 参数和一个 REF CURSOR out 参数,但似乎无法为TORA(我的 SQL IDE)弄清楚它

这是我想执行并查看光标的过程的人为示例:

PROCEDURE get_peeps_in_city ( pi_city IN varchar(100), po_recordset OUT REF CURSOR )
    IS
    BEGIN
         OPEN po_recordset
         FOR Select Id, 
                FName, 
                LName
             FROM People
             WHERE City like '%' || pi_city || '%'
    END;

这是我迄今为止尝试过的:

DECLARE
    v_cursor REF CURSOR;
BEGIN
    execute PKG_PEEPS.get_peeps_in_city('Chicago', v_cursor);
END

我得到的错误类似于:

PLS-00103:在期待其中一个时遇到符号“END” 下列的: 开始函数包 pragma 过程子类型类型使用形式当前 光标

【问题讨论】:

  • 那么问题是什么?有什么错误吗?
  • 好像你忘记了 OPEN 光标后的分号 (;)
  • 你可以忽略任何语法错误,代码和我的生产代码不一样。我可以保证程序代码正常工作并且语法合理,因为它适用于多种不同的应用程序。问题的核心是如何专门从TORA调用带有ref cursor out参数的存储过程。
  • 我明白了......在这种情况下我不知道))我已经下载并安装了这个软件,因为它对我很感兴趣(我首先从你那里听说过)。它看起来既可爱又舒适,但由于某种原因,它在我使用它 1 分钟后就崩溃了((
  • 顺便说一句,如果我们省略 execute 关键字会怎样?我记得在plsql中没有必要

标签: oracle plsql tora


【解决方案1】:

您可能正在寻找这样的东西:

DECLARE
    v_cursor SYS_REFCURSOR;
    v_Id NUMBER;
    v_FName VARCHAR2(200);
    v_LName VARCHAR2(200);
BEGIN
    PKG_PEEPS.get_peeps_in_city('Chicago', v_cursor);

    LOOP
      FETCH v_cursor INTO v_Id, v_FName, v_LName;
      EXIT WHEN v_cursor%NOTFOUND;
        -- do something with v_Id, v_FName, v_LName
    END LOOP;
    CLOSE v_cursor;
END;
/

更新:

您可能希望查询的结果显示在 IDE 中,就像您直接运行 SELECT 语句一样。上面的代码不会发生这种情况,我不知道有任何代码可以实现这一点(除非您安装特定的表函数)。

你能做的最好的事情是在循环中输出检索到的数据(使用DBMS_OUTPUT.PUT_LINE)。

【讨论】:

  • 这看起来很有希望......但是当我试一试时,我得到了一些关于 v_cursor ref cursor 的新错误。 > PLS-00201:必须声明标识符“CURSOR”。
  • 对不起,我忘了你在使用弱类型游标时必须使用旧的 LOOP / FETCH / NOTFOUND / CLOSE 东西。你可能有一个强类型的。但由于您的程序声明无效,我无法确定。无论如何,我已经更新了我的答案。
  • @Codo - 您可以直接在 SQL*Plus 或 SQL Developer 中显示结果,但我看不到如何在 TOra 中执行此操作(并且不了解 Toad 等)。您可以使用variable v_cursor refcursorexec:v_cursor 作为输出参数的过程,然后只使用print :v_cursor。不过,loop/dbms_output 看起来像是在 TOra 中执行此操作的唯一方法。
  • 这很酷。我不知道。但它很可能仅限于 SQLPlus 和 SQL Developer,因为它是一个 SQLPlus 命令,而 SQL Developer 是唯一具有相当完整的 SQL*plus 命令实现的其他工具。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多