高分在线等待oracle存储过程翻译成sql server存储过程

cxp19871102 2010-12-09 02:45:18
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=:P_RUN_DATE
where BADGE_NO= c1_rec.no
and FLAG='Y' ;
end if;
end if;
END LOOP;
update DUTY_TIME_REC_SEVEN
set RUN_DATE=:P_RUN_DATE;
commit;
end;
...全文
89 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
suiziguo 2010-12-09
  • 打赏
  • 举报
回复
去SQL SERVER区问问看。

1,617

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧