**我已经创建了plsql程序,它将给定日期的输出日期作为dbms_output 现在我想计算dbms_output的两个日期之间的差异,如何在其中使用 dbms_output englishcalendar-滞后(englishcalendar)(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]
开始日期和结束日期可能会因不同条件而异
答案 0 :(得分:2)
您可以声明一个变量来保存上一个日期。您可以在下一次迭代中使用它。
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;
我没有测试。