着急!在线等待oracle存储过程翻译成sql server存储过程
原始数据工作日期 员工编号 部门 员工姓名 上班时间 下班时间 实际上班时间 实际下班时间
2010-09-01 09140 总务课 丁亚伟 2010-09-0108:00:00 2010-09-01 17:30:00 2010-09-01 08:00:00 2010-09-01 17:30:00
2010-09-01 09140 总务课 丁亚伟 2010-09-01 07:00:00 2010-09-01 08:00:00 2010-09-01 06:45:41 2010-09-01 08:00:00
2010-09-01 09140 总务课 丁亚伟 2010-09-01 17:30:00 2010-09-01 21:00:00 2010-09-01 17:30:00 2010-09-01 21:04:21
2010-09-02 09140 总务课 丁亚伟 2010-09-02 08:00:00 2010-09-02 17:30:00 2010-09-02 08:00:00 2010-09-02 17:30:00
2010-09-02 09140 总务课 丁亚伟 2010-09-02 07:00:00 2010-09-02 08:00:00 2010-09-02 06:52:25 2010-09-02 08:00:00
最终要的结果单位 工号 姓名 入厂日期 职位 开始日期 结束日期 连续出勤天数 可再延续出勤天数
管理部 09140 丁亚伟 2009-5-20 驾驶员 2010-9-1 2010-9-4 4 2
管理部 09140 丁亚伟 2009-5-20 驾驶员 2010-9-6 2010-9-11 6 0
管理部 09140 丁亚伟 2009-5-20 驾驶员 2010-9-13 2010-9-21 9 0
管理部 09140 丁亚伟 2009-5-20 驾驶员 2010-9-24 2010-9-27 4 2
现在已经得到数据有:单位,工号,姓名,入厂日期,职位。
现在不会做的:开始日期,结束日期,连续出勤天数,可再出勤天数 不会做:
其中:开始日期为每个月的1号或休假后的第一天
结束日期为每个月的最后一天或休假前一天
连续出勤天数为:结束日期-开始日期
可再出勤天数分两种情况:
1: 可再出勤天数<7天 提示:6-连续出勤天数;
2: 可再出勤天数>=7天 提示:0
如下是oracle的存储过程代码,要翻译成sql server2000存储过程的代码,我对sql server2000存储过程不熟悉,想请大侠不吝赐教! 急要,谢谢CREATE OR REPLACE
PROCEDURE INS_DUTY_TIME_REC_SEVEN IS
CURSOR C1 IS
select no
from PERSONNEL_BASIC--人事基本数据table
where area_code like :P_AREA
and resign_date is null
and dl_idl = 'D'
order by no;
v_num NUMBER:= 0;
v_num_2 NUMBER:= 0;
v_day NUMBER:= 0;
a_date date;
p_date varchar(15);
p_date_end varchar(15);
begin
--目前日期往前1天
p_date := to_char(:P_RUN_DATE-1,'yyyymmdd') ;
p_date_end := to_char(:P_RUN_DATE,'yyyymmdd') ;
FOR c1_rec in c1 LOOP
select count(*)
into v_num
from DUTY_TIME_REC--刷卡资料table
where IN_OUT_TIME >=to_date(P_date||'06:00:00','yyyymmddhh24:mi:ss')--刷卡的时间范围
and IN_OUT_TIME <= to_date(P_date_end||'05:59:59','yyyymmddhh24:mi:ss')
and IN_OUT ='01'--上班卡
and BADGE_NO = c1_rec.no
and rownum=1;
begin
select count(DAYS),DAYS
into v_num_2 ,v_day
from DUTY_TIME_REC_SEVEN--连续记录table
where BADGE_NO= c1_rec.no
and FLAG='Y'
group by DAYS;
exception
when others then
v_num_2:=0;
v_day:=0;
end;
if v_num>0 then
if v_num_2>0 then
update DUTY_TIME_REC_SEVEN
set DAYS=DAYS+1,
END_DATE=to_date(P_date,'yyyymmdd')
where BADGE_NO= c1_rec.no
and FLAG='Y' ;
end if;
if v_num_2 =0 then
insert into DUTY_TIME_REC_SEVEN(BADGE_NO,DAYS,END_DATE,RUN_DATE,FLAG)
values (c1_rec.no,1,to_date(P_date,'yyyymmdd'),:P_RUN_DATE,'Y');
end if;
end if;
if v_num =0 then
if v_day>=6 then
update DUTY_TIME_REC_SEVEN
set FLAG='N'
where BADGE_NO= c1_rec.no
and FLAG='Y';
insert into DUTY_TIME_REC_SEVEN(BADGE_NO,DAYS,END_DATE,RUN_DATE,FLAG)
values (c1_rec.no,0,to_date(P_date,'yyyymmdd'),:P_RUN_DATE,'Y');
end if;
if v_day<6 then
update DUTY_TIME_REC_SEVEN
set DAYS=0,
FLAG='Y',
RUN_DATE