如何从花药调用一个存储过程并修改返回的引用游标?
我有两个存储过程,p_proc1
和 p_proc2
。 p_proc1
返回一个引用游标,我想使用 p_proc2
中的数据。是否可以在p_proc2
中调用p_proc1
并修改数据集(外部连接另一个表)?数据库是Oracle。
I have two stored procs, p_proc1
and p_proc2
. p_proc1
returns a refcursor and I want to use the data in p_proc2
. Is it possible call p_proc1
in p_proc2
and modify the dataset (outer join another table)? The database is Oracle.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不直接,不。
SYS_REFCURSOR 是一个指向结果的指针——您唯一能做的就是获取数据。您无法修改结果集。
P_PROC2 可以从 SYS_REFCURSOR 获取数据,发出查询以从其他表获取附加数据,然后将某些内容返回给调用者。那时,我倾向于将 P_PROC2 转变为流水线表函数。但是您可以只返回一个包含修改后的数据的集合。
如果 p_proc2 绝对需要返回 REF CURSOR,您可以将 p_proc1 的 REF CURSOR 中的数据提取到全局临时表中,然后在 p_proc2 中打开一个新游标来查询此全局临时表并执行您希望的任何其他操作。像这样的东西
Not directly, no.
A SYS_REFCURSOR is a pointer to a result-- the only thing you can do with that is to fetch the data. You can't modify the result set.
P_PROC2 could fetch the data from the SYS_REFCURSOR, issue queries to get additional data from some other table, and return something to the caller. At that point, I would tend to favor turning P_PROC2 into a pipelined table function. But you could just return a collection with the modified data in it.
If p_proc2 absolutely needs to return a REF CURSOR, you could fetch the data from p_proc1's REF CURSOR into a global temporary table and then open a new cursor in p_proc2 that queries this global temporary table and does whatever additional manipulation you wish. Something like