具有相同参考光标的多个循环

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】:

引用游标是一个“单向集合”,如果您想再次阅读,必须再次重新打开它。

你有两个选择:

    在每次阅读前重新打开参考光标。 将引用光标获取到记录/记录集合并将记录/集合传递给后续调用,而不是将引用光标传递到那里。

【讨论】:

以上是关于具有相同参考光标的多个循环的主要内容,如果未能解决你的问题,请参考以下文章

properties类中怎么根据value取到key

在循环中写入多个文件会产生相同的文件

如何使用多个具有相同名称的表单输入?

vue中控制input获取焦点

哪些 GATT 服务使用具有相同 UUID 的多个特征?

从具有相同方法名称的多个接口继承