sql - 从返回引用游标记录的函数中获取

标签 sql oracle plsql oracle10g

我在一个包中有一个函数,它将一个 REF CURSOR 返回到一个记录。我正在尝试从代码块中调用此函数。调用代码如下所示:

declare      
   a_record package_name.record_name; 
   cursor c_symbols is select package_name.function_name('argument') from dual;

begin 
   open c_symbols;   
   loop            
        fetch c_symbols into a_record;
        exit when c_symbols%notfound;              
   end loop;
   close c_symbols; 
end;

作为 package_name 一部分的函数声明如下所示:
TYPE record_name IS RECORD(
      field_a       varchar2(20);
);

TYPE record_cursor IS REF CURSOR RETURN record_name;

FUNCTION getsymbols(argument IN varchar2) return record_cursor;

当我尝试运行调用代码块时,出现异常:PLS-00386: type mismatch found at 'EXAMPLE_SYMBOLS' between FETCH cursor and INTO variables。

a_record 的类型应该是什么,我如何访问我正在获取的记录的各个元素(类型为 record_name)?

最佳答案

我怀疑您认为您的游标应该从 REFCURSOR 中获取行。它不是。 REFCURSOR 本身就是一个游标,您不需要使用另一个游标从中进行选择。

您当前的游标正在做的是获取包含函数调用结果的单行、单列。这是 record_cursor不是 record_name ,所以你得到一个类型不匹配。

我怀疑你真正想做的是这样的:

declare
  symbol_cursor  package_name.record_cursor;
  symbol_record  package_name.record_name;
begin
  symbol_cursor := package_name.function_name('argument');
  loop
    fetch symbol_cursor into symbol_record;
    exit when symbol_cursor%notfound;

    -- Do something with each record here, e.g.:
    dbms_output.put_line( symbol_record.field_a );

  end loop;

  CLOSE symbol_cursor;

end;

关于sql - 从返回引用游标记录的函数中获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1106555/

相关文章:

sql - MySQL - 选择计数(*),分组依据,但保持分离

mysql - CFWheels - Order = "random"抛出列错误

mysql - SQL 子查询作为具有多个 where 子句的列

java - getConnection() 中抛出空指针异常

database - 为什么很多表ORACLE默认12c?

sql - 如何使用 Oracle 的 dbms_standard 包

oracle - Oracle 数据库是否应该有多个表空间用于数据存储?

oracle - 在多个 pl/sql 调用中部分使用游标而不在包规范中定义它

sql - 什么时候应该使用数据库同义词?

oracle - 单元测试 Oracle PL/SQL