【问题标题】:Pass a regular CURSOR to a PL/SQL procedure that expects SYS_REFCURSOR将常规 CURSOR 传递给需要 SYS_REFCURSOR 的 PL/SQL 过程
【发布时间】: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 不是数据类型。如何定义这样的函数/过程的参数?

标签: oracle plsql cursor sys-refcursor


【解决方案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;

【讨论】:

  • 谢谢艾伦。我意识到了这种可能性。但我想问我想要的是否可能。再次感谢。
猜你喜欢
  • 2019-12-03
  • 2021-10-06
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多