过程的强定义光标输出

时间:2015-06-11 14:39:57

标签: oracle stored-procedures plsql

我目前正在尝试在我正在编写的函数中使用由其他人编写的Oracle PL / SQL过程。它将强定义的游标作为IN OUT参数。该过程打开光标并对其进行选择。我需要在调用过程后访问光标指向的数据。光标被键入为用户也定义的记录。

我有一个函数,我声明一个系统引用游标并将该游标作为该过程的IN OUT参数传递。在调用该过程后,我尝试从我声明的引用游标中获取数据。我将记录类型的定义复制到我的函数中,并尝试将数据从游标中提取到该类型的记录中。

该函数编译,但是当我去运行它时,我得到错误" ORA-24338:语句句柄未执行"。我查找了这个错误,当你尝试从没有打开的游标中获取时,它似乎发生了。我查看了该过程,并且在open语句之前没有条件语句或返回,这将使程序停止打开,因此每次调用该程序都应该打开。

我认为这与程序将IN OUT定义为用户定义类型的事实有关,但是我将游标定义为我的函数中的过程作为系统引用游标。我尝试将类型定义从过程复制到我的函数中,并在我的函数中声明引用游标作为该类型,但后来我得到一个编译错误,说我将错误类型的参数传递给过程。

我道歉,因为我无法包含任何代码,但我想我会详细写出我的逻辑,希望有人能够确认我的逻辑是对还是错,因为我很确定它是我的引用游标逻辑的问题。谢谢。

修改

我将尝试创建一个演示问题的通用示例代码

CREATE OR REPLACE function schemaName.functionName
(
  paramDeclaration TYPE
  ...
  paramDeclaration TYPE
) RETURN TYPE

IS 

return_record record_type@otherDatabase;
myCursor cursor@otherDatabase;

BEGIN

procedure@otherDatabase(myCursor);

LOOP
   FETCH myCursor INTO return_record;
EXIT WHEN myCursor%NOTFOUND

注意:procedure @ otherDatabase是使用select语句打开myCursor的地方。

希望这会有所帮助。我再次道歉,因为无法提供更多信息。

0 个答案:

没有答案