Цикл Sys_Refcursor: Обнаружено несоответствие типов между курсором и переменными INTO - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть функция, которая возвращает 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;

У меня есть другая функция, в которой я хочу вызвать вышеуказанную функцию, и через нее l oop. Это выглядит так:

    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;

Я собираю числа в числа, так что же это за несоответствие? Как мне решить это? Кажется, это должно быть просто, но я в растерянности.

Спасибо.

1 Ответ

2 голосов
/ 10 февраля 2020

Я думаю, что ваша проблема с использованием курсора.

объявите переменную типа 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;
/
...