Sylers 2017-05-15 06:43
浏览 398
已结题

以下存储过程有什么错误,帮忙找找。谢谢!

create or replace procedure sp_upd_sch_dates is
l_sql VARCHAR(4000);
l_sql2 VARCHAR(4000);
l_sql3 VARCHAR(4000);
v_taskname VARCHAR2(128);
v_schid VARCHAR2(15);
v_taskid VARCHAR2(15);
v_weekday varchar2(12);
v_startdate Date;
v_finishdate Date;
v_base_date Date;
v_status Integer;
v_lag_time Integer;
v_lag_time2 Integer;
v_tasktype Integer;
type pre_cur is ref cursor;
s_sch_cur pre_cur;
s_sch_task_cur pre_cur;
s_sch_task_cur2 pre_cur;

begin
l_sql := ' select schtsk.rschedule_tagu schid,ceil(schtskfrmexe.pactual_finish_date-schtskfrminf.pfinish_date) lag_time,schtskfrminf.pstart_date
from infodba.PSCHEDULETASK schtsk
join infodba.pworkspaceobject schtskobj on schtsk.puid = schtskobj.puid
join infodba.pitem schtskitm on schtsk.puid = schtskitm.puid
join infodba.pitemrevision schtskitmrev on schtskitm.puid = schtskitmrev.ritems_tagu

join infodba.PSCHEDULETASKREVISION schtskrev on schtskrev.puid = schtskitmrev.puid
join infodba.pimanrelation schtskrevrel on schtskrev.puid = schtskrevrel.rprimary_objectu --任务信息
join infodba.pform schtskrevrelfrm on schtskrevrel.rsecondary_objectu= schtskrevrelfrm.puid

join infodba.pimanrelation schtskrevrelexe on schtskrev.puid = schtskrevrelexe.rprimary_objectu --任务执行信息
join infodba.pform schtskrevfrmexe on schtskrevrelexe.rsecondary_objectu= schtskrevfrmexe.puid
join infodba.PTASKSCHEDULINGFORMINFO schtskfrminf on schtskrevrelfrm.rdata_fileu= schtskfrminf.puid
join infodba.PTASKEXECUTIONFORMINFO schtskfrmexe on schtskrevfrmexe.rdata_fileu= schtskfrmexe.puid
where schtskobj.pobject_name in (''概念图面确认'',''细化图面确认'',''外观模型确认'')
and schtskfrmexe.pactual_finish_date > schtskfrminf.pfinish_date';

open s_sch_cur for l_sql;
loop
<>
fetch s_sch_cur into v_schid, v_lag_time, v_base_date;
exit when s_sch_cur%notfound;
l_sql2 := 'select schtskfrminf.puid,schtskfrminf.pstart_date,schtskfrminf.pfinish_date
from infodba.PSCHEDULETASK schtsk
join infodba.pworkspaceobject schtskobj on schtsk.puid = schtskobj.puid
join infodba.pitem schtskitm on schtsk.puid = schtskitm.puid
join infodba.pitemrevision schtskitmrev on schtskitm.puid = schtskitmrev.ritems_tagu

join infodba.PSCHEDULETASKREVISION schtskrev on schtskrev.puid = schtskitmrev.puid
join infodba.pimanrelation schtskrevrel on schtskrev.puid = schtskrevrel.rprimary_objectu --任务信息
join infodba.pform schtskrevrelfrm on schtskrevrel.rsecondary_objectu= schtskrevrelfrm.puid

join infodba.pimanrelation schtskrevrelexe on schtskrev.puid = schtskrevrelexe.rprimary_objectu --任务执行信息
join infodba.pform schtskrevfrmexe on schtskrevrelexe.rsecondary_objectu= schtskrevfrmexe.puid
join infodba.PTASKSCHEDULINGFORMINFO schtskfrminf on schtskrevrelfrm.rdata_fileu= schtskfrminf.puid
join infodba.PTASKEXECUTIONFORMINFO schtskfrmexe on schtskrevfrmexe.rdata_fileu= schtskfrmexe.puid
where schtskfrmexe.pstatus <> 3
and schtskrev.ptask_type = 0
and schtsk.rschedule_tagc=' || v_schid ||

'order by schtskfrminf.pstart_date asc';

    open s_sch_task_cur for l_sql2;
    <<loop2>>
    loop
    fetch s_sch_task_cur into v_taskname, v_taskid, v_startdate, v_finishdate, v_status, v_tasktype;
    exit when s_sch_task_cur%notfound;
         v_weekday := '';
         if v_status in (0, 1, 2, 5) and v_startdate > v_base_date then
             if v_taskname = '立项评审(M10)' then
               v_lag_time2 := v_lag_time;
             end if;

             select to_char(v_startdate + v_lag_time,'day') into v_weekday from dual;                 
             if v_weekday in ('星期六','星期日') then
                v_lag_time := v_lag_time + 2;             
             end if;
             update infodba.ptaskschedulingforminfo
             set pstart_date = to_date(to_char(pstart_date + v_lag_time,'yyyy-mm-dd'))
             where ptaskschedulingforminfo.puid = v_taskid;    

             select to_char(v_finishdate + v_lag_time,'day') into v_weekday from dual;
             if v_weekday in ('星期六','星期日') then
                v_lag_time := v_lag_time + 2;               
             end if;

             update infodba.ptaskschedulingforminfo
             set pfinish_date = to_date(to_char(pfinish_date + v_lag_time,'yyyy-mm-dd hh24:mi:ss'))
             where ptaskschedulingforminfo.puid = v_taskid;


         end if;

     end loop;
     close s_sch_task_cur;

     l_sql3 := 'select schtskfrminf.puid,schtskfrminf.pstart_date,schtskfrminf.pfinish_date
                from infodba.PSCHEDULETASK schtsk 
                 join infodba.pworkspaceobject schtskobj on schtsk.puid = schtskobj.puid 
                 join infodba.pitem schtskitm on schtsk.puid = schtskitm.puid
                 join infodba.pitemrevision schtskitmrev on schtskitm.puid = schtskitmrev.ritems_tagu  
                 join infodba.PSCHEDULETASKREVISION schtskrev on schtskrev.puid = schtskitmrev.puid
                 join infodba.pimanrelation schtskrevrel on schtskrev.puid = schtskrevrel.rprimary_objectu --任务信息
                 join infodba.pform schtskrevrelfrm on schtskrevrel.rsecondary_objectu= schtskrevrelfrm.puid    
                 join infodba.pimanrelation schtskrevrelexe on schtskrev.puid = schtskrevrelexe.rprimary_objectu --任务执行信息
                 join infodba.pform schtskrevfrmexe on schtskrevrelexe.rsecondary_objectu= schtskrevfrmexe.puid
                 join infodba.PTASKSCHEDULINGFORMINFO schtskfrminf on schtskrevrelfrm.rdata_fileu= schtskfrminf.puid
                 join infodba.PTASKEXECUTIONFORMINFO schtskfrmexe on schtskrevfrmexe.rdata_fileu= schtskfrmexe.puid
                where schtskfrmexe.pstatus <> 3
                and schtskrev.ptask_type <> 0
                and schtsk.rschedule_tagc=' || v_schid ||  
                'order by schtskrev.ptask_type asc';
     open s_sch_task_cur2 for l_sql3;
     <<loop3>>
     loop
     fetch s_sch_task_cur2 into v_taskname, v_taskid, v_startdate, v_finishdate, v_status, v_tasktype;
     exit when s_sch_task_cur2%notfound;
         if v_taskname = '工业设计' and v_status in (0, 1, 2, 5) then

           update infodba.ptaskschedulingforminfo
           set pfinish_date = to_date(to_char(pfinish_date + v_lag_time2,'yyyy-mm-dd hh24:mi:ss'))
           where ptaskschedulingforminfo.puid = v_taskid;
         else 
           update infodba.ptaskschedulingforminfo
           set pfinish_date = to_date(to_char(pfinish_date + v_lag_time,'yyyy-mm-dd hh24:mi:ss'))
           where ptaskschedulingforminfo.puid = v_taskid;    
         end if;
     end loop;
     close s_sch_task_cur2;
end loop;

commit;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
dbms_output.put_line(dbms_utility.format_error_backtrace);
end sp_upd_sch_dates;

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥85 maple软件,solve求反函数,出现rootof怎么办?
    • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
    • ¥65 汇编语言除法溢出问题
    • ¥15 Visual Studio问题
    • ¥20 求一个html代码,有偿
    • ¥100 关于使用MATLAB中copularnd函数的问题