我有一个PL / SQL表,只有在运行时生成的工作日
L_busdays(1)=27-NOV-15
L_busdays(3)=25-NOV-15
L_busdays(4)=24-NOV-15
L_busdays(5)=23-NOV-15
L_busdays(8)=20-NOV-15
L_busdays(9)=19-NOV-15
这是在运行时生成的,因为它们是假日和周末,所以缺少L_busdays(2)
,L_busdays(6)
和L_busdays(7)
等值。
我需要生成另一个PL / SQL表,以便我可以在下面的数据上来回反复:
L_busdays(1)=27-NOV-15
L_busdays(2)=25-NOV-15
L_busdays(3)=24-NOV-15
L_busdays(4)=23-NOV-15
L_busdays(5)=20-NOV-15
L_busdays(6)=19-NOV-15
我无法实现它。我总是没有找到缺失值的数据错误,即使我通过处理找不到的数据分配给另一个表,另一个表也有主要数据的确切副本击败了整个目的。请帮我怎么做。这在运行时是必需的。
for j in 1..L_busdays.COUNT
loop
begin
L_busdays_sec(l):=L_busdays(j);
exception
when no_data_found then
null;
end;
l:=l+1;
end loop;
答案 0 :(得分:3)
您不必创建新集合来导航稀疏集合(例如工作日)(除非您出于其他目的需要它)。只需使用NEXT()
方法转到下一个条目,然后PRIOR()
向后转。
declare
type l_days_nt is table of date
index by pls_integer;
L_busdays l_days_nt;
idx pls_integer;
begin
-- populate collection
L_busdays(1):=to_date('27-NOV-15');
L_busdays(3):=to_date('25-NOV-15');
L_busdays(4):=to_date('24-NOV-15');
L_busdays(5):=to_date('23-NOV-15');
L_busdays(8):=to_date('20-NOV-15');
L_busdays(9):=to_date('19-NOV-15');
dbms_output.put_line('navigate collection forwards ...');
idx := L_busdays.first();
while idx is not null
loop
dbms_output.put_line('idx #'||idx||'='||to_char(L_busdays(idx)));
idx := L_busdays.next(idx);
end loop;
dbms_output.put_line('.... and backwards');
idx := L_busdays.last();
while idx is not null
loop
dbms_output.put_line('idx #'||idx||'='||to_char(L_busdays(idx)));
idx := L_busdays.prior(idx);
end loop;
end;
/
PL / SQL文档中有很多关于收集方法的内容。 Find out more.