oracle按开始时间和结束时间进行数据拆分的自定义函数
create or replace function fun_admin(d_tiem in date) --d_tiem 是传入的时间
return number as v_name number;
begin
DECLARE
CURSOR --游标
crs_testAvg
IS
select 住院就诊流水号,入院科室编码,入院时间,出院时间,出院科室名称,出院科室编码,sc from ( select d.住院就诊流水号,d.入院科室编码,d.出院科室编码,d.入院时间,d.出院时间,d.出院科室名称, round(d.出院时间 - d.入院时间) as sc from dc_出院登记表 d where d.出院时间 >= d_tiem) zd;
v_emp crs_testAvg%rowtype;
numinfo number(10);
i number(10);
j number(10):=0;
ij number(10):=0;
begin
for v_emp in crs_testAvg loop
i:=0;
numinfo:=v_emp.sc;
--dbms_output.put_line(v_emp.sc);
while i <= numinfo loop
ij:=i;
select count(*) into j from admin_work_area r where r.patient_id = v_emp.住院就诊流水号and r.i = ij ;
-- dbms_output.put_line(v_emp.住院就诊流水号 || LPAD( i,3,'--')||LPAD( j,3,'--') );
if j=0 then
insert into admin_work_area(dept_name,dept_id ,open_time,patient_id,sj,i) values( v_emp.出院科室名称,v_emp.出院科室编码,v_emp.入院时间+i,v_emp.住院就诊流水号,to_char(v_emp.入院时间+i,'yyyy-mm'),i);
commit;
end if;
i:=i+1;
end loop;
end loop;
v_name:=1;
return v_name;
end;
end fun_admin;