平台:Oracle
语言:PL/SQL
问题:想要将过程 OUT 游标输出到 SQLDeveloper SQLWosksheet。
任何人都知道如何使用 Oracle“Select * from Table(PipelinedFunction(Param))”来检查过程代码输出游标?
我正在使用 Oracle 存储过程的 Crsytal Reports。Crystal 要求一个过程返回一个游标,它会获取并读取该游标。
我拥有的程序代码目前正在工作,但我想找到最简单的方法来查看程序代码更改的效果。我有可用的 SQLDeveloper,我正在其中进行创建和 sql 测试。我想在 SQL Developer 查询结果窗口(“SQL 工作表”)中快速获得可见的结果。
有没有一种(简单的)方法可以使用函数从过程中读取光标?(并将其输出到 Table 函数?)
很复杂,我知道,但是当我能看到代码更改的结果时,我处理得最好。如果我可以直接查看记录结果,将加快报告的开发速度。
我知道 Table 函数和一点关于 Oracle 中的流水线的知识。我对一般游标和 sys_refcursor 了解一些。我非常了解类型以及我为什么需要它们。(难道 sys_regCursor 不应该让我们摆脱这种情况吗?)
当前过程执行了一系列适当但不优雅的查询、插入到全局临时表 (GTT)、从 GTT 和原始表连接、更多插入和更多自连接,然后将结果选择到 OUT 游标中。仅依靠游标等我可能会做得更好,但是当前的方法足以获得报告的结果。
我认为我可以很好地处理 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 甚至没有考虑让我重新引用过程中的输出游标(“结果”是一个 sys_refcursor,它保存过程中最后一个 SELECT 的结果)。我不知道如何定义它,打开它,并从过程中引用它。
我从来没有到过我可以尝试的地方
SELECT * FROM TABLE(GET_BACKPLANE( ... etc )
抱歉,有任何错别字和糟糕的 Oracle 语法……已经好几天了。