Дальнейшая обработка данных, полученных в заданном dbms_output - PullRequest
0 голосов
/ 22 мая 2019

** Я создал программу plsql, которая выдаст дату вывода определенной даты как dbms_output. Теперь я хочу вычислить разницу между двумя датами dbms_output, как я могу использовать это в dbms_output englishcalendar - lag (englishcalendar) (по порядкупо английскому календарю) **

SET SERVEROUTPUT ON;
declare

start_date    date:='01-02-2019';
end_date       date:='01-05-2019';

cursor c_data is
    SELECT
        cregflow6.*
    FROM
    cregflow6
    WHERE
    englishcalendar BETWEEN start_date
    AND  end_date
    and  m_flg ='M'
    or englishcalendar= end_date
    or englishcalendar= start_date ;

type t__data is table of c_data%rowtype index by binary_integer;
t_data t__data;

begin

open c_data;
loop
    fetch c_data bulk collect into t_data limit 10000;

    exit when t_data.count = 0;

    for i in t_data.first .. t_data.last loop
        dbms_output.put_line(t_data(i).englishcalendar);    
    end loop;

end loop;
close c_data;

end;
/

ОБРАЗЕЦ DBMS_OUTPUT

01-02-2019
12-02-2019
14-03-2019
13-04-2019
01-05-2019

Ожидается в DBMS_OUTPUT

01-02-2019          0
12-02-2019          11          [01-02-2019-12-02-2019  ]
14-03-2019          33          [12-02-2019 -14-03-2019 ]
13-04-2019          32          [14-03-2019 -13-04-2019 ]
01-05-2019          17          [13-04-2019 - 01-05-2019]   

ДАТА НАЧАЛА И КОНЕЦ МОЖЕТ ИЗМЕНЯТЬСЯ В РАЗНЫХ УСЛОВИЯХ

1 Ответ

2 голосов
/ 22 мая 2019

вы можете объявить переменную, в которую вы будете сохранять последнюю дату.Вы можете использовать его в следующей итерации.

declare
  v_last_date date; -- is null
  ...
begin
  ...

  for i in t_data.first .. t_data.last loop
    if v_last_date is null then

      dbms_output.put_line(to_char(t_data(i).englishcalendar,'dd-mm-yyyy')||' 0' ); 
    else
      dbms_output.put_line(to_char(t_data(i).englishcalendar,'dd-mm-yyyy')||' ' 
                          ||to_char(t_data(i).englishcalendar - v_last_date)
                          ||' [' ||to_char(t_data(i).englishcalendar,'dd-mm-yyyy')||'-'
                          || to_char(v_last_date ,'dd-mm-yyyy')||']' ); 
    end if;
    v_last_date := t_data(i).englishcalendar; -- save a date of the iteration   
  end loop;
end;

Я не проверял это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...