具有相同参考光标的多个循环
Posted
技术标签:
【中文标题】具有相同参考光标的多个循环【英文标题】:Multiple loops with same Ref Cursor 【发布时间】:2014-07-01 05:55:49 【问题描述】:我在我的过程中使用ref cursor作为OUT参数。它只返回一行 150 列。
之后我想在多个函数中使用相同的光标作为 IN 参数。但是当我尝试使用它时,只有第一个函数成功。
在第一个函数中,我从上面的过程中传递 ref cursor,动态列名,并使用 OUT 参数获取该列值。我在第一个函数中使用循环来获取列值,而不是在此处关闭参考光标。
在第二个函数中,我传递相同的 ref cursor 作为 IN 参数、列名(用于更新目的)和第一个列的值功能。我也在这里使用循环。但是那个光标不会在这里循环。
我在循环中的更新语句不起作用。我没有在任何地方关闭 ref 游标,但我不知道为什么会这样?任何有意义的想法。
这是我在包中创建的所有对象,我在一个事务中按顺序调用这些对象。
Function GetPersNameId ( pinClientId person.client_id%type,
pupNameId person.nameid%type,
pupRC in out pls_integer )
return boolean;
Function GetOrgnNameId ( pinClientId organization.client_id%type,
pupNameId organization.client_id%type,
pupRC in out pls_integer )
return boolean;
Function GetEitherNameId ( pinClientId person.client_id%type,
pupNameId person.nameid%type,
pupRC in out pls_integer )
return boolean;
Procedure ResolveNameId( pinStartIntfKey number,
pinEndIntfKey number,
pupRC in out pls_integer);
【问题讨论】:
我假设您使用dbms_sql
表示“引用游标”,因为pupRC
到处都是pls_integer
。我说的对吗?
【参考方案1】:
引用游标是一个“单向集合”,如果您想再次阅读,必须再次重新打开它。
你有两个选择:
-
在每次阅读前重新打开参考光标。
将引用光标获取到记录/记录集合并将记录/集合传递给后续调用,而不是将引用光标传递到那里。
【讨论】:
以上是关于具有相同参考光标的多个循环的主要内容,如果未能解决你的问题,请参考以下文章