代码之家  ›  专栏  ›  技术社区  ›  Marc

Quick-N-Dirry结果:在SQL工作表中查看过程输出光标的结果?

  •  0
  • Marc  · 技术社区  · 14 年前

    平台:Oracle
    语言:PL/SQL
    问题:要将过程输出到sqldeveloper sqlwosksheet中。

    有人知道如何使用Oracle“select*from table(pipelinedfunction(param))”检查过程代码输出游标吗?

    我正在使用Oracle存储过程的crsytal报告。Crystal要求一个过程返回一个光标,它获取并读取该光标。

    我拥有的过程代码目前正在工作,但我想找到查看过程代码更改效果的最简单方法。我有可用的sqldeveloper,我正在做我的创建和SQL测试。我希望在SQL开发人员查询结果窗口(“SQL工作表”)中快速显示结果。

    是否有一种(简单)方法可以使用函数从过程中读取光标?(并将其导出到表函数?)

    我知道,这很复杂,但当我能看到代码更改的结果时,我处理得最好。如果我可以直接查看记录结果,它将加速报告的开发。

    我知道table函数,还有一些关于Oracle中管道的知识。我对光标和系统指针有一点了解。我对类型和我需要它们的原因知之甚少。(难道Sys-Regcursor不应该让我们远离它吗?)

    当前过程执行一系列适当但不准确的查询、插入到全局临时表(GTT)、来自GTT和原始表的联接、更多的插入和更多的自联接,然后将结果选择到输出光标中。我可能只依靠光标之类的东西就可以做得更好,但是当前的方法已经足够好,可以将结果发送到报告中。

    我认为我可以很好地处理SQL(出于我们的目的),但我不是Oracle特定的开发人员…但我需要帮助。

    有人碰到这个吗?整个想法是为了加快程序代码的开发速度,但我花了几天时间寻找一种方法来获取输出…不是我想的那样。

    更新:
    我尝试过一些基于我在网上看到的棉条的愚蠢计划…如

    Create or replace FUNCTION GET_BACKPLANE (
       Node VARCHAR2 ) RETURN SYS_REFCURSOR
    AS
    
    RESULTS SYS_REFCURSOR;
    
    BEGIN
        Open Results for
            Select Backplane(Results, Node) from Dual ;
        ... etc.
    

    Create or replace Function GET_BACKPLANE ( 
        NODE VARCHAR2 )  RETURN  My_Table_Stru%ROWTYPE  PIPELINED
    AS
    
    BEGIN ...
    

    我认为Oracle甚至没有考虑让我重新引用过程中的输出光标(“results”是一个保存过程中最后一次选择结果的系统引用光标)。我不知道如何定义它,打开它,并从过程中引用它。

    我从来没有到过可以尝试的地方

    SELECT * FROM TABLE(GET_BACKPLANE( ... etc )
    

    抱歉有任何拼写错误和错误的甲骨文语法…好长时间了。

    2 回复  |  直到 14 年前
        1
  •  3
  •   APC    14 年前

    Backplane(Results, Node) results node

    var rc refcursor
    
    exec  Backplane(results=>:rc, Node=>42) 
    
    print rc
    

    print

        2
  •  0
  •   Marc    14 年前

    推荐文章