Purpose: To get next sequence number(max+1) from table, but if there is gap, fill the gap first.
Useful for small tables
Useful for small tables
Drop Table num_seq_test;
create table num_seq_test
(num_seq number(3) );
insert into num_seq_test values(1);
insert into num_seq_test values(2);
insert into num_seq_test values(3);
insert into num_seq_test values(4);
insert into num_seq_test values(5);
insert into num_seq_test values(7);
insert into num_seq_test values(8);
insert into num_seq_test values(9);
commit;
declare
l_my_aray dbms_sql.Number_Table;
l_next_sr# number(3);
begin
select num_seq
bulk collect into l_my_aray
from num_seq_test
where num_seq is not null
-- and rownum < 1
order by 1;
/* When no data in table just return 1 */
if sql%rowcount != 0
then
for i in 1..l_my_aray.count
loop
if l_my_aray(i) != i
then
l_next_sr# := i ;
exit;
else
l_next_sr# := i + 1 ;
end if;
end loop;
else
l_next_sr# := 1;
end if;
dbms_output.put_line(l_next_sr#);
end;
Drop Table num_seq_test;
create table num_seq_test
(num_seq number(3) );
insert into num_seq_test values(1);
insert into num_seq_test values(2);
insert into num_seq_test values(3);
insert into num_seq_test values(4);
insert into num_seq_test values(5);
insert into num_seq_test values(7);
insert into num_seq_test values(8);
insert into num_seq_test values(9);
commit;
declare
l_my_aray dbms_sql.Number_Table;
l_next_sr# number(3);
begin
select num_seq
bulk collect into l_my_aray
from num_seq_test
where num_seq is not null
-- and rownum < 1
order by 1;
/* When no data in table just return 1 */
if sql%rowcount != 0
then
for i in 1..l_my_aray.count
loop
if l_my_aray(i) != i
then
l_next_sr# := i ;
exit;
else
l_next_sr# := i + 1 ;
end if;
end loop;
else
l_next_sr# := 1;
end if;
dbms_output.put_line(l_next_sr#);
end;
Drop Table num_seq_test;
No comments:
Post a Comment