A表学号
---------------------------------
0001
0002
0003
0004
0005
0006
0007
0009
0010
0013
0016
0019
0021
0022
0024
0026
0027
0028
0029
0030
0031
0032
0033
0036
0039
0038
0042B表
学号范围
------------------
0001~0015
0019~0029
0040~0050
现在需要找到A表中不存这三个范围内的学号并将其列出来。例如第一个范围内不存在的学号是:0011,0012,0014 第二个范围不存在的是20,23,25。现求怎么实现。谢谢
---------------------------------
0001
0002
0003
0004
0005
0006
0007
0009
0010
0013
0016
0019
0021
0022
0024
0026
0027
0028
0029
0030
0031
0032
0033
0036
0039
0038
0042B表
学号范围
------------------
0001~0015
0019~0029
0040~0050
现在需要找到A表中不存这三个范围内的学号并将其列出来。例如第一个范围内不存在的学号是:0011,0012,0014 第二个范围不存在的是20,23,25。现求怎么实现。谢谢
create or replace procedure find_number as
v_beg varchar2(10);
v_end varchar2(10);
i number;
j number;
v_a_number varchar2(10); cursor c1 is select * from b;
begin
for c in c1 loop
v_beg:=substr(c.学号范围,1,instr(c.学号范围,'~')-1);
v_end:=substr(c.学号范围,instr(c.学号范围,'~')+1); for i in to_number(v_beg)..to_number(v_end) loop
v_a_number:=lpad(i,4,'0'); select count(*) into j from a
where 学号=v_a_number; if j=0 then
dbms_output.put_line('the number '||v_a_number||' in range '||v_beg||' '||v_end||' does not exists');
end if;
end loop;
end loop
end;
/
首先你可以对A表的学号建个索引,其次,对B表你可以分批倒入,然后分批
执行存储过程。