循环 Sys_Refcursor:在游标和 INTO 变量之间发现类型不匹配

Looping Through Sys_Refcursor: Type Mismatch Found Between Cursor and INTO Varaiables

我有一个 returns 一个 Sys_Refcursor 的函数。它看起来像这样:

    Open l_cursor For
      Select b.balance + b.arrears arrears_bucket
            ,b.levy + b.penalty levy_bucket
            ,b.supplementary_levy supp_bucket
            ,b.other_balance + b.other_penalty other_bucket
            ,b.arrears_balance + b.arrears_penalty + b.levy_balance + b.levy_penalty calculated_balance
        From balances b
       Where b.id = p_id;
    Return l_cursor;

我有另一个函数,我想在其中调用上面的函数,并循环遍历它。它看起来像这样:

    Cursor l_cursor Is
      Select balance_sel(p_id) From dual;
    l_result1 Number;
    l_result2 Number;
    l_result3 Number;
    l_result4 Number;
    l_result5 Number;

    Begin
      Loop
      Fetch l_cursor into l_result1, l_result2, l_result3, l_result4, l_result5;
      EXIT  WHEN l_cursor%notfound;
      End Loop;

但我一直收到错误消息:

Error: PLS-00386: type mismatch found at 'L_RESULT1' between FETCH cursor and INTO variables
Line: 316
Text: Fetch l_cursor into l_result1, l_result2, l_result3, l_result4, l_result5;

我正在将数字提取为数字,那么不匹配是怎么回事?我该如何解决? 这看起来应该很简单,但我很茫然。

谢谢。

我认为你的问题出在光标的使用上。

声明一个 sys_refcursor 类型的变量并保存函数的结果

declare
  l_cursor Sys_Refcursor;

  l_result1 Number;
  l_result2 Number;
  l_result3 Number;
  l_result4 Number;
  l_result5 Number;

Begin
...
  l_cursor := balance_sel(p_id);
  Loop
    Fetch l_cursor into l_result1, l_result2, l_result3, l_result4, l_result5;
    EXIT  WHEN l_cursor%notfound;
  End Loop;

end;
/