将常规 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_REFCURSOR
或 VARCHAR2
。
我已经知道我可以做到:
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 过程的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例
将触摸信息传递给另一个 UIView 下的 UIScrollView
如何使用 Python 将变量传递给 MySQLdb 查询?
GWT 使用 RequestFactory 将 Objectify Cursor 从服务器传递到客户端,并在 DataGrid 中显示更多页面