具有相同Ref Cursor的多个循环

时间:2014-07-01 05:55:50

标签: sql oracle plsql

我在过程中使用参考光标作为OUT参数。它仅返回一行150列

之后我想在多个函数中使用相同的光标作为 IN 参数。但是当我尝试使用它时,只有第一个函数能够成功运行。

在第一个函数中,我从proc proc,动态列名称传递 ref cursor ,并使用OUT参数获取该列值。我在第一个函数中使用循环来获取列值,而不是在这里关闭引用光标。

在第二个函数中,我将参考光标作为 IN 参数,列名(用于更新目的)和第一列中的列值传递功能。我也在这里使用循环。但是这个光标并没有在这里循环。

我在圈内的更新声明不起作用。我没有关闭任何地方的光标,但我不知道它为什么会发生?任何可以理解的想法。

我在包中创建的所有对象,我按顺序在一个事务中调用它们。

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);

1 个答案:

答案 0 :(得分:0)

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

您有两种选择:

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