代码之家  ›  专栏  ›  技术社区  ›  neesh

从函数中获取,返回一个参考光标进行记录

  •  4
  • neesh  · 技术社区  · 17 年前

    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:在FETCH游标和INTO变量之间的“示例SYMBOLS”处发现类型不匹配。

    3 回复  |  直到 17 年前
        1
  •  7
  •   Dave Costa    17 年前

    当前游标所做的是获取一行一列,其中包含函数调用的结果。这是一个 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;
    
        2
  •  0
  •   Jeffrey Kemp    17 年前

    函数返回a record_cursor ,所以我预计 a_record 也应该是 record_name

        3
  •  0
  •   Juergen Hartelt    17 年前

    c_symbols package_name.record_cursor .

    建议:

    • 更改声明 c符号 c_symbols package_name.record_cursor "
    • open c_symbols c_symbols := package_name.function_name('argument') "

    只要被调用的函数确实返回了一个游标,它就应该工作。

    推荐文章