好贷网好贷款

着急!在线等待oracle存储过程翻译成sql server存储过程 100lpf19870909]

发布时间:2016-12-3 17:42:08 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"着急!在线等待oracle存储过程翻译成sql server存储过程 100lpf19870909]",主要涉及到着急!在线等待oracle存储过程翻译成sql server存储过程 100lpf19870909]方面的内容,对于着急!在线等待oracle存储过程翻译成sql server存储过程 100lpf19870909]感兴趣的同学可以参考一下。

本帖最后由 lpf19870909 于 2010-12-20 15:50:14 编辑 原始数据 工作日期 员工编号 部门 员工姓名 上班时间 下班时间 实际上班时间 实际下班时间 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=: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;

该回复于2010-12-22 09:22:48被版主删除

还是那句话,你的结果跟你的数据,基本对不上,所以这样的测试数据,给了等于没给。 另外,结果中的,开始日期 结束日期 取自原表中的什么列呢? 上班时间 下班时间 实际上班时间 实际下班时间

最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。 如果有多表,表之间如何关联? 发帖注意事项 http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281

create PROCEDURE INS_DUTY_TIME_REC_SEVEN  as begin select no from PERSONNEL_BASIC where area_code like '%'+P_AREA+'%'   and resign_date is null and dl_idl = 'D' order by no; declare @v_num int set @v_num=0 declare @v_num_2 int set @v_num_2=0 declare @v_day int set @v_day=0 declare @a_date datetime declare @p_date varchar(15) declare @p_date_end varchar(15) end 转了前一部分,实在是太费劲了。 就你这段代码而言,Oracle和Sql中的主要区别如下: 定义变量 sql中是 declare @i int sql中时间格式转换 convert(varchar(10),时间字段,120) sql中是 if else end 没有then  sql中是 可以直接select 而不需要游标 sql中赋值用set @i=1 不是:= sql中select into 表数据可以,为变量赋值是 select @i=count(*) from tablename 授人鱼不如授人渔,而我的渔技也是菜鸟。

 呵呵。。如果oracle 中有循环。那你就得注意了

上一篇:求解service broker 20ILOVE_ASPNET]
下一篇:继续求助:sql2008r2 镜像配置报错! 20yanruxuan]

相关文章

相关评论