如何让 refcursor 结果/输出显示为文本?

Posted

技术标签:

【中文标题】如何让 refcursor 结果/输出显示为文本?【英文标题】:How to get refcursor result/output to show as text? 【发布时间】:2012-04-20 13:36:44 【问题描述】:

我正在尝试在 Oracle 中调用存储过程并显示调用结果,问题是它在 FETCH v_cur into v_a; 行上崩溃,错误为:ORA-06504: PL/SQL: Return types of Result Set variables or query do not match.

我猜查询的输出与v_a VARCHAR2(100) 不匹配,但我不知道该放什么。被调用的存储过程连接了几个表,并选择了属于不同表的 20 多个不同的列。所以我想要的是只查看查询的输出,而不必分别引用每个结果列。我该怎么做呢?

我正在使用 SQL Navigator(我猜不是那么重要)。

DECLARE 
  v_cur SYS_REFCURSOR;
  v_a   VARCHAR2(100);
BEGIN
   pkg_get_results.get_rows(v_cur,to_date('2012/04/12', 'yyyy/mm/dd'),to_date('2012/04/12', 'yyyy/mm/dd'), '','','','');
  LOOP
    FETCH v_cur into v_a;  -- what to put here ?
    EXIT WHEN v_cur%NOTFOUND;
    dbms_output.put_line(v_a );
  END LOOP;
  CLOSE v_cur;
END;

【问题讨论】:

实际上,您使用什么产品很重要。对于 SQL Nav,请按照此处的说明进行操作:sqlnavigator.inside.quest.com/thread.jspa?threadID=2466 @IgbyLargeman - 如果您将其发布为答案,我会投票赞成。 @JustinCave:谢谢,但我觉得在没有根据我自己的知识或研究进行任何详细说明的情况下发布一个基本上是“我用谷歌搜索过,这是我发现的”的答案是不对的。遗憾的是,这些天我没有与 Oracle 合作,也没有办法(或时间)进行测试。 @Igby,没关系。您找到了答案,并且通过创建一个可以被 OP 接受的答案,您可以让有类似问题的人更容易找到它。这就是为什么如此伟大。如果答案隐藏在 cmets 中,那么 OP 就无法接受,而且人们也更难找到。 @DCookie:是的。我仍然觉得我只是在谷歌搜索中添加了一个多余的结果,但我可以看到争论的双方。我会发布它。 【参考方案1】:

SQL Navigator 确实有能力为您做到这一点。如何做到这一点完全取决于您的 Navigator 版本,并且可以想象(尽管我不知道)某些版本可能没有它。

说明可以在这个帖子中找到:http://sqlnavigator.inside.quest.com/thread.jspa?threadID=2466

顺便说一句,蟾蜍也有这种能力。

【讨论】:

所以在例如没有办法做到这一点。 SQLPlus ? 当然。您可以在 PL/SQL 块之前定义一个绑定变量,然后将其打印出来。看看这里:docs.oracle.com/cd/B28359%5F01/server.111/b31189/…

以上是关于如何让 refcursor 结果/输出显示为文本?的主要内容,如果未能解决你的问题,请参考以下文章

将 refcursor 视为表 - Oracle

SQL Developer 脚本输出截断 sys_refcursor 宽度

创建具有 SYS_REFCURSOR 作为输出参数的 mysql 过程时出错

PLSQL 查看 sys_refcursor 的输出

如何使用多个表循环 SYS_REFCURSOR?

matlab结果输出小数