将常规 CURSOR 传递给需要 SYS_REFCURSOR 的 PL/SQL 过程

Posted

技术标签:

【中文标题】将常规 CURSOR 传递给需要 SYS_REFCURSOR 的 PL/SQL 过程【英文标题】:Pass a regular CURSOR to a PL/SQL procedure that expects SYS_REFCURSOR 【发布时间】:2014-04-26 17:45:56 【问题描述】:

我在 PL/SQL 中有很多这样的命名游标:

cursor MY_CURSOR_01 is select * from my_table_01;
cursor MY_CURSOR_02 is select * from my_table_02;

我想在 dbms_xmlgen.newContext 过程中使用它们,该过程需要包含实际查询的 SYS_REFCURSORVARCHAR2

我已经知道我可以做到:

dbms_xmlgen.newContect('select * from my_table_01');

但我想重用现有的游标,而不是将它们重写为字符串查询。

有什么想法吗?我在 Oracle 10gR2 上。

【问题讨论】:

据我所知,但可能隐藏在一些 DBMS_whatever 包中的东西可以做到这一点。您可以尝试在AskTom 上发布此内容 - 如果您收到回复,请从此处链接到该回复(作为评论或答案)。谢谢。 我怀疑是否有任何包可以处理这种转换,因为cursor 不是数据类型。如何定义这样的函数/过程的参数? 【参考方案1】:

我认为不存在这样的函数,因为 Oracle 的语言规范不允许将 cursor 对象作为参数传递。除非 Oracle 在某处使用了一些魔法,否则无法在不使用 refcursor 的情况下通用引用 cursor

但是,您无需将 SQL 嵌入字符串即可使用sys_refcursor。这是一个非常简单的示例,显示可以使用静态 SQL 打开 sys_refcursor

DECLARE
   c SYS_REFCURSOR;
BEGIN
   OPEN c FOR SELECT * FROM DUAL;
   CLOSE c;
END;

【讨论】:

谢谢艾伦。我意识到了这种可能性。但我想问我想要的是否可能。再次感谢。

以上是关于将常规 CURSOR 传递给需要 SYS_REFCURSOR 的 PL/SQL 过程的主要内容,如果未能解决你的问题,请参考以下文章

将核心数据结果传递给 UILabel

如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例

将触摸信息传递给另一个 UIView 下的 UIScrollView

如何使用 Python 将变量传递给 MySQLdb 查询?

我可以将方法中的变量传递给适配器中的文本视图吗?

GWT 使用 RequestFactory 将 Objectify Cursor 从服务器传递到客户端,并在 DataGrid 中显示更多页面