平台: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 )
抱歉有任何拼写错误和错误的甲骨文语法…好长时间了。