Долго отрабатывает конвейерная функция на Oracle

Имею табличную функцию на Oracle 19с, которую вызываю таким образом: SELECT * FROM TABLE(pkg_wapp_assistant.f_wapp_assistant_calc(in_id_calc => 1, in_id_request => 24))

При тестировании получаю время отработки 22-23 сек. Но при логировании кода получаю обработку логики в 1 сек:

  • 13.06.2023 14:16:11 start
  • 13.06.2023 14:16:11 into logic
  • 13.06.2023 14:16:11 open cur
  • 13.06.2023 14:16:11 1
  • 13.06.2023 14:16:11 2
  • 13.06.2023 14:16:11 3
  • 13.06.2023 14:16:11 4
  • 13.06.2023 14:16:11 close cur

Возник резонный вопрос, что занимает 20 сек. времени при расчете, если данные уже готовы для вывода через 1 сек.

Код функции:

FUNCTION f_wapp_assistant_calc
  (
    in_id_calc    IN NUMBER,
    in_id_request IN NUMBER
  ) RETURN t_wapp_assistant_response_table
    PIPELINED IS
  
    l_rec   t_wapp_assistant_response_record;
    l_logic CLOB;
    TYPE l_cur_type IS REF CURSOR;
    l_cur l_cur_type;
  
  BEGIN
  
    dbms_output.put_line(to_char(SYSDATE, 'dd.mm.yyyy hh24:mi:ss') || ' start');
  
    SELECT c.logic INTO l_logic FROM codecpm.ag_tmp_calc c WHERE c.id_calc = in_id_calc;
  
    dbms_output.put_line(to_char(SYSDATE, 'dd.mm.yyyy hh24:mi:ss') || ' into logic');
  
    OPEN l_cur FOR l_logic
      USING in_id_request;
  
    dbms_output.put_line(to_char(SYSDATE, 'dd.mm.yyyy hh24:mi:ss') || ' open cur');
  
    LOOP
    
      FETCH l_cur
        INTO l_rec;
      EXIT WHEN l_cur%NOTFOUND;
    
      PIPE ROW(l_rec);
    
      dbms_output.put_line(to_char(SYSDATE, 'dd.mm.yyyy hh24:mi:ss') || ' ' ||
                           l_cur%ROWCOUNT);
    
    END LOOP;
  
    CLOSE l_cur;
  
    dbms_output.put_line(to_char(SYSDATE, 'dd.mm.yyyy hh24:mi:ss') || ' close cur');
    
  END;```

Ответы (0 шт):