Thursday, March 26, 2009

My Stored procedure

declare
t_ticketid varchar2(200):='SRQ15654';
i number;
v_net_date varchar2(200):=0;
v_time varchar2(200);
v_hours number;
v_minutes number;
v_seconds number;
v_mseconds number;
begin
i:=0;
for rec in (select e.status
,e.tkstatusid
,e.changedate
,e.ticketid
,(select min(d.status)
from xx_tkstatus d
where d.tkstatusid > e.tkstatusid
and e.ticketid = d.ticketid
and d.tkstatusid = ((select min(d.tkstatusid)
from xx_tkstatus d
where d.tkstatusid > e.tkstatusid
and e.ticketid = d.ticketid))) next_status
,(select min(d.tkstatusid)
from xx_tkstatus d
where d.tkstatusid > e.tkstatusid
and e.ticketid = d.ticketid) next_tkstatusid
,(select min(d.changedate)
from xx_tkstatus d
where d.tkstatusid>e.tkstatusid
and e.ticketid=d.ticketid) changedate_next
from xx_tkstatus e,xx_ticket x
where e.ticketid=x.ticketid
and e.ticketid=t_ticketid
and x.actualfinish is not null
and x.owner is not null
order by 2
)
loop
if rec.status = 'INPROG' then
select (to_date(nvl(rec.changedate_next,sysdate),'DD-MON-RRRR HH:MI:SS PM')-to_date(rec.changedate,'DD-MON-RRRR HH:MI:SS PM')+1)-
(SELECT COUNT(DAYS) FROM (SELECT TO_CHAR(TO_DATE(rec.changedate,'DD-MON-RRRR HH:MI:SS PM')+LEVEL ,'D') DAYS
FROM DUAL CONNECT BY LEVEL < (to_date(nvl(rec.changedate_next,sysdate),'DD-MON-RRRR HH:MI:SS PM')-to_date(rec.changedate,'DD-MON-RRRR HH:MI:SS PM')))
WHERE DAYS IN ('7' ,'1')) DAY
INTO V_TIME
FROM DUAL;
-- dbms_output.put_line('v_time is:'||v_time);
V_NET_DATE:=V_NET_DATE+V_TIME;
end if;
-- dbms_output.put_line(tab(i).tkstatusid||'-'||tab(i).tkstatusid_next||'---'||tab(i).changedate||'----'||tab(i).changedate_next||tab(i).status||'----'||tab(i).status_next);
end loop;

select days
,TRUNC(A*24) Hours
,TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes
,TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds
-- ,TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
into v_mseconds
,v_hours
,v_minutes
,v_seconds
-- ,v_mseconds
from
(
select
trunc(v_net_date) Days,
v_net_date - trunc(v_net_date) A
from dual
);

dbms_output.put_line('Days:'||v_mseconds||' Hours :'||v_hours||' Minutes :'||v_minutes||' Seconds :'||v_seconds);

exception
when others then
dbms_output.put_line(Sqlerrm);
end;

No comments:

Post a Comment