场景:需要找出某个序列中未被使用的序列值,并插入临时表中备用,同时临时表中需要生成自己的主键序列。
declare
v_seq number(10) := 1 ;
v_record number(10) ;
begin
for i in 100000 .. 101000 loop --查找这个范围内未被使用的序列值,i本是控制循环次数,这里也同时被用于待检查的序列值。
select count(*) into v_record from bms_sa_dtl t where t.salesdtlid = i ; --必须有Into,循环控制变量i 可以在循环体中被引用
if v_record=0 then --不能用sql%notfound ,如果查询结果为空,oracle会报错,并终止循环,所以使用查询结果记录数来做判断
dbms_output.put_line('未被使用的序列值:'||i );
insert into seq_tmp values(v_seq,i);
v_seq := v_seq + 1 ;
else
dbms_output.put_line('已被使用的序列值:'||i );
end if ;
end loop;
commit;
end;