Вы находитесь на странице: 1из 9

declare

cursor c2 is select ftda,ftnr,orac,dstc,carr,occa,ocft,flpk_lck from flpk where


to_char(ftda,'YYYY')=2013 /*and flpk_lck='N' and ftda=to_Date('02/04/13','dd/mm
/yyy')
and orac='MBA' and DSTC='EBB' and clean_ftnr(ftnr)=321 */for update;
c2_rec c2%rowtype;
------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------------
FUNCTION ADD_NUM_SLS (pconf IN VARCHAR2) RETURN NUMBER IS
vcount NUMBER;
vcount1 number;
vcount2 number;
vcount3 number;
vstr VARCHAR2(100);
vpart VARCHAR2(100);
vcode varchar2(2);
BEGIN
vcount:=0;
vstr:=pconf;
LOOP
IF(INSTR(vstr,'.',1,2) <> 0) THEN
vpart:=SUBSTR(vstr,2,INSTR(vstr,'.',1,2)-2);
ELSE
vpart:=SUBSTR(vstr,2,LENGTH(vstr));
END IF;

vcode:=regexp_substr(vpart, '[[:alpha:]]{2}');
IF vcode is not null and vcode not like 'E%' then
vcount1:=nvl(regexp_substr(vpart, '[[:digit:]]+',1,1),
0);
vcount2:=nvl(regexp_substr(vpart, '[[:digit:]]+',1,2),
0);
vcount3:=nvl(regexp_substr(vpart, '[[:digit:]]+',1,3),
0);

case vcode
when 'GG' then
vcount:=nvl(vcount,0)+greatest(vcount1,v
count2);
else
vcount:=nvl(vcount,0)+vcount1+vcount2+vc
ount3;
end case;
end if;
IF(INSTR(vstr,'.',1,2) <> 0) THEN
vstr:=SUBSTR(vstr,INSTR(vstr,'.',1,2),LENGTH(vstr));
ELSE
exit;
END IF;
end loop;
RETURN NVL(vcount,0);
END;
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-----------------------------
FUNCTION ADD_NUM (pstring IN VARCHAR2) RETURN NUMBER IS
vcount NUMBER;
pstring2 VARCHAR2(300);
BEGIN
vcount:=0;
pstring2:=pstring;

LOOP
pstring2:=replace(replace(pstring2,chr(10),''),chr(13),'');
IF(INSTR(pstring2,'/')=0) THEN
vcount:=nvl(vcount,0) + TO_NUMBER(pstring2);

pstring2:=NULL;
ELSE
vcount:=nvl(vcount,0) + TO_NUMBER(SUBSTR(pstring2,1,INSTR(pstrin
g2,'/')-1));
pstring2:=SUBSTR(pstring2,INSTR(pstring2,'/')+1,LENGTH(pstring2)
);
END IF;

EXIT WHEN pstring2 is null;
END LOOP;

RETURN vcount;
END;
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-------------------------
FUNCTION GET_TOT_COL(p_orac IN char, p_dstc IN char, p_ftnr IN char, p_carr
IN char, p_ftda in date) RETURN number IS
vnbpax number;
vcnt pls_integer;
para_prgm_flpk_col_incl_inf varchar2(1);
BEGIN
select get_para_prgm('FLPK_COL_INCL_INF') into para_prgm_flpk_col_incl_i
nf from dual;
select sum(npax)
into vnbpax
from
(
select nvl(sum(nvl(npax,1)),0) npax
from tptu
where orac = p_orac
and dstc = p_dstc
and ftda = to_date(p_ftda,'dd/mm/yy')
and nvl(clean_ftnr(ftnr),0) = nvl(clean_ftnr(p_ftnr),0)
and rtrim(carr) = rtrim(p_carr)
and utnr in (select tdnr from emis where type_docu in ('T'))
and (
para_prgm_flpk_col_incl_inf = 'Y'
or
(para_prgm_flpk_col_incl_inf = 'N' and nvl(upper(tpax),'A') <> 'I
')
)
union all
select nvl(sum(nvl(npax,1)),0)
from tpte
where orac = p_orac
and dstc = p_dstc
and ftda = to_date(p_ftda,'dd/mm/yy')
and nvl(clean_ftnr(ftnr),0) = nvl(clean_ftnr(p_ftnr),0)
and rtrim(carr) = rtrim(p_carr)
and type_docu = 'T'
and (
para_prgm_flpk_col_incl_inf = 'Y'
or
(para_prgm_flpk_col_incl_inf = 'N' and nvl(upper(tpax),'A') <> 'I')
)
);

return vnbpax;
END;
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---
FUNCTION get_lod_count (pftda date, pftnr varchar2, porac varchar2, pdstc
varchar2, pcarr varchar2) return number
IS
vcount NUMBER;
vpaxc VARCHAR2(300);
vpadc VARCHAR2(300);
vnbpx VARCHAR2(100);
vsrce VARCHAR2(10);
vtpax number;
BEGIN
vcount:=0;
BEGIN
SELECT tpax_srce, tpax INTO vsrce, vtpax
FROM flpk
WHERE ltrim(rtrim(orac)) = ltrim(rtrim(porac))
and ltrim(rtrim(dstc)) = ltrim(rtrim(pdstc))
and ftda = to_date(pftda,'dd/mm/yy')
and ltrim(rtrim(carr)) = ltrim(rtrim(pcarr))
and clean_ftnr(ftnr) = clean_ftnr(pftnr);
EXCEPTION
WHEN NO_DATA_FOUND THEN vcount:=0;
END;

-- Depending On Source Selected, Appropriate Table Will Be Queried
IF(vsrce='LDM') THEN -- LDM
BEGIN
SELECT LDM_PAXTOT INTO vcount FROM airdata.ldm_orac_dstc WHE
RE NVL(LTRIM(RTRIM(carr)),'')=NVL(LTRIM(RTRIM(pcarr)),'')
AND NVL(LTRIM(RTRIM(orac)),'')=NVL(LTRIM(RTRIM(porac)),'
')
AND NVL(LTRIM(RTRIM(dstc)),'')=NVL(LTRIM(RTRIM(pdstc)),'') A
ND TRUNC(ftda_orig_gmt)=to_date(pftda,'dd/mm/yy')
AND (clean_ftnr(ftnr)=clean_ftnr(pftnr));
EXCEPTION
WHEN NO_DATA_FOUND THEN vcount:=0;
END;

ELSIF(vsrce='PFS') THEN -- PFS
BEGIN
SELECT distinct LTRIM(RTRIM(paxc)),LTRIM(RTRIM(padc)) INTO vpa
xc,vpadc FROM airdata.pfs WHERE NVL(LTRIM(RTRIM(carr)),'')=NVL(LTRIM(RTRIM(pcarr
)),'')
AND NVL(LTRIM(RTRIM(orac)),'')=NVL(LTRIM(RTRIM(porac)),'')
AND NVL(LTRIM(RTRIM(destc)),'')=NVL(LTRIM(RTRIM(pdstc)),'')
AND TRUNC(ftda)=to_date(pftda,'dd/mm/yy')
AND (clean_ftnr(ftnr)=clean_ftnr(pftnr));
EXCEPTION
WHEN NO_DATA_FOUND THEN vcount:=0;
END;
vcount:=NVL(ADD_NUM(vpaxc),0);
vcount:=vcount + NVL(ADD_NUM(vpadc),0);

ELSIF(vsrce='PRL') THEN -- PRL
SELECT COUNT('X') INTO vcount FROM airdata.prl,airdata.prl_detai
l WHERE airdata.prl.sqnu=airdata.prl_detail.sqnu
AND NVL(LTRIM(RTRIM(carr)),'')=NVL(LTRIM(RTRIM(pcarr)),'') AND NVL(L
TRIM(RTRIM(orac)),'')=NVL(LTRIM(RTRIM(porac)),'')
AND NVL(LTRIM(RTRIM(dstc)),'')=NVL(LTRIM(RTRIM(pdstc)),'') AND TRUNC
(ftda)=to_date(pftda,'dd/mm/yy')
AND (clean_ftnr(ftnr)=clean_ftnr(pftnr));

ELSIF(vsrce='SLS') THEN -- SLS
BEGIN
SELECT distinct LTRIM(RTRIM(nbpx)) INTO vnbpx FROM airdata.s
ls,airdata.sls_detail WHERE airdata.sls.sqnu=airdata.sls_detail.sqnu
AND NVL(LTRIM(RTRIM(carr)),'')=NVL(LTRIM(RTRIM(pcarr)),'') A
ND NVL(LTRIM(RTRIM(orac)),'')=NVL(LTRIM(RTRIM(porac)),'')
AND NVL(LTRIM(RTRIM(dstc)),'')=NVL(LTRIM(RTRIM(pdstc)),'') A
ND TRUNC(ftda)=to_date(pftda,'dd/mm/yy')
AND (clean_ftnr(ftnr)=clean_ftnr(pftnr));
EXCEPTION
WHEN NO_DATA_FOUND THEN vcount:=0;
END;
vcount:=NVL(ADD_NUM_SLS(vnbpx),0);

ELSIF(vsrce='FOS') THEN -- FOS
BEGIN
SELECT DISTINCT LTRIM(RTRIM(NVL(PAX_F,0)+NVL(PAX_C,0)+NVL(PAX_Y
,0))) INTO vnbpx FROM flpk_fos
WHERE NVL(LTRIM(RTRIM(carr)),'')=NVL(LTRIM(RTRIM(pcarr)),'') AN
D NVL(LTRIM(RTRIM(orac)),'')=NVL(LTRIM(RTRIM(porac)),'')
AND NVL(LTRIM(RTRIM(dstc)),'')=NVL(LTRIM(RTRIM(pdstc)),'') AND
TRUNC(ftda)=to_date(pftda,'dd/mm/yy')
AND (clean_ftnr(ftnr)=clean_ftnr(pftnr));
EXCEPTION
WHEN NO_DATA_FOUND THEN vcount:=0;
END;
vcount:=NVL(vnbpx,0);

ELSIF(vsrce='SHD') THEN -- SHD
BEGIN
SELECT DISTINCT NVL(TPAX,0) INTO vnbpx FROM flgt_schd
WHERE NVL(LTRIM(RTRIM(carr)),'')=NVL(LTRIM(RTRIM(pcarr)),'') AN
D NVL(LTRIM(RTRIM(orac)),'')=NVL(LTRIM(RTRIM(porac)),'')
AND NVL(LTRIM(RTRIM(dstc)),'')=NVL(LTRIM(RTRIM(pdstc)),'') AND
TRUNC(ftda)=to_date(pftda,'dd/mm/yy')
AND (clean_ftnr(ftnr)=clean_ftnr(pftnr));
EXCEPTION
WHEN NO_DATA_FOUND THEN vcount:=0;
END;
vcount:=NVL(vnbpx,0);
ELSIF(vsrce='USER') THEN -- USER
vcount:=vtpax;
END IF;

return vcount;
END;

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-----------
FUNCTION GET_TOT_COL_CSHR(p_orac IN char, p_dstc IN char, p_ftnr IN char, p_
carr IN char, p_ftda in date) RETURN number IS

vrec number:=0;
vcount number:=0;
vret number:=0;

vcarr char(4);
vftnr char(5);


cursor c1 is select carr, ftnr
from flpk
where orac = p_orac and dstc = p_dstc and ftda = to_date(p_ftda,'dd/mm/y
y')
and ltrim(rtrim(occa)) = ltrim(rtrim(p_carr)) and clean_ftnr(ocft) = cle
an_ftnr(p_ftnr);

BEGIN

vret:=get_tot_col(p_orac, p_dstc, p_ftnr, p_carr, to_date(p_ftda,'dd/mm/yy
'));

select count (*) into vcount
from flpk
where ltrim(rtrim(orac)) = ltrim(rtrim(p_orac)) and ltrim(rtrim(dstc)) =
ltrim(rtrim(p_dstc)) and ftda = to_date(p_ftda,'dd/mm/yy') and ltrim(rtrim(occ
a)) = ltrim(rtrim(p_carr))
and clean_ftnr(ocft) = clean_ftnr(p_ftnr);

if vcount =0 then
return(vret);
else

OPEN C1;
LOOP
FETCH C1 INTO vcarr, vftnr;
EXIT WHEN C1%NOTFOUND;

vret:=vret+get_tot_col(p_orac, p_dstc, clean_ftnr(vftnr), vc
arr,to_date(p_ftda,'dd/mm/yy'));

END LOOP;
CLOSE C1;

return(vret);

end if;

END;
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------
FUNCTION GET_FIM_COL(p_orac IN char, p_dstc IN char, p_ftnr IN char, p_carr
IN char, p_ftda in date) RETURN number IS

vnbpax_fim_tpte number := 0;
vnbpax_fim_tptu number := 0;
vnbpax_fim number := 0;
BEGIN
-- recup npax from tpte
select
nvl(sum(npax_farv),0)+nvl(sum(npax_carv),0)+nvl(sum(npax_yarv),0)+nv
l(sum(npax_fanr),0)+nvl(sum(npax_canr),0)+nvl(sum(npax_yanr),0)
+nvl(sum(npax_fcrv),0)+nvl(sum(npax_ccrv),0)+nvl(sum(npax_ycrv),0)+n
vl(sum(npax_fcnr),0)+nvl(sum(npax_ccnr),0)+nvl(sum(npax_ycnr),0)
+nvl(sum(npax_finf),0)+nvl(sum(npax_cinf),0)+nvl(sum(npax_yinf),0)
into vnbpax_fim_tpte
from tpte
where ftda = to_date(p_ftda,'dd/mm/yy')
and ltrim(rtrim(ftnr),0) = ltrim(rtrim(p_ftnr),0)
and rtrim(carr) = rtrim(p_carr)
and orac = p_orac
and dstc = p_dstc
and (type_docu ='F' or fman is not null);

-- recup npax from tptu
select sum(nvl(npax,1)) into vnbpax_fim_tptu
from tptu
where orac = p_orac and dstc = p_dstc and ftda =to_date(p_ftda,'dd/mm/yy
') and ltrim(rtrim(ftnr),0) = ltrim(rtrim(p_ftnr),0)
and rtrim(carr) = rtrim(p_carr)
and 'F' in ( select nvl(type_docu,'T') from emis where tdnr=utnr and ro
wnum=1);
vnbpax_fim := nvl(vnbpax_fim_tpte,0) + nvl(vnbpax_fim_tptu,0);
return nvl(vnbpax_fim,0);
END;
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------
FUNCTION GET_BSA_TYPE(p_orac IN char, p_dstc IN char, p_ftnr IN char, p_carr
IN char, p_ftda in date, p_type in char) RETURN number IS
vcount number;
vnpax number:=0;
BEGIN

select count(sqnu) into vcount
from cshr_activity
where rtrim(ltrim(orac))=rtrim(ltrim(p_orac)) and rtrim(ltrim(dstc))=rtr
im(ltrim(p_dstc))
and ftda=to_date(p_ftda,'dd/mm/yy') and rtrim(ltrim(o_carr))=rtrim(ltrim
(p_carr)) and ltrim(rtrim(o_ftnr),0)=ltrim(rtrim(p_ftnr),0);

if vcount <> 0 then

if p_type = 'ALL' then
vnpax:=GET_BSA_TYPE(p_orac, p_dstc, p_ftnr, p_carr, p_ftda,
'ADT')
+GET_BSA_TYPE(p_orac, p_dstc, p_ftnr, p_carr, p_
ftda, 'CHD')
+GET_BSA_TYPE(p_orac, p_dstc, p_ftnr, p_carr, p_
ftda, 'INF');

elsif p_type = 'ADT' then

select sum(decode(
nvl(nadt,0)+nvl(radt,0)+nvl(rchd,0)+nvl(nchd,0),
0,
nvl(bloc_seat,0)+nvl(addt_seat,0),
nvl(nadt,0)+nvl(radt,0)))
into vnpax
from cshr_activity a, cshr_activity_clsc b
where b.sqnu_activity=a.sqnu and a.ftda=to_date(p_ftda,'dd/m
m/yy')
and rtrim(ltrim(o_carr))=rtrim(ltrim(p_carr)) and clean_ftnr
(o_ftnr)=clean_ftnr(p_ftnr)
and rtrim(ltrim(orac))=rtrim(ltrim(p_orac)) and rtrim(ltrim(
dstc))=rtrim(ltrim(p_dstc));

elsif p_type = 'CHD' then

select sum(nvl(rchd,0)+nvl(nchd,0)) into vnpax
from cshr_activity a, cshr_activity_clsc b
where b.sqnu_activity=a.sqnu and a.ftda=to_date(p_ftda,'dd/m
m/yy')
and rtrim(ltrim(o_carr))=rtrim(ltrim(p_carr)) and clean_ftnr
(o_ftnr)=clean_ftnr(p_ftnr)
and rtrim(ltrim(orac))=rtrim(ltrim(p_orac)) and rtrim(ltrim(
dstc))=rtrim(ltrim(p_dstc));

elsif p_type = 'INF' then

select sum(nvl(rinf,0)+nvl(ninf,0)) into vnpax
from cshr_activity a, cshr_activity_clsc b
where b.sqnu_activity=a.sqnu and a.ftda=to_date(p_ftda,'dd/m
m/yy')
and rtrim(ltrim(o_carr))=rtrim(ltrim(p_carr)) and clean_ftnr
(o_ftnr)=clean_ftnr(p_ftnr)
and rtrim(ltrim(orac))=rtrim(ltrim(p_orac)) and rtrim(ltrim(
dstc))=rtrim(ltrim(p_dstc));

else
vnpax :=0;
end if;

else
vnpax :=0;
end if;

return(vnpax);

END;
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-----------
FUNCTION is_flpk_balanced (pftda date, pftnr varchar2, porac varchar2, pdstc
varchar2, pcarr varchar2, pocca varchar2, pocft varchar2)
RETURN BOOLEAN
/*
Purpose:
-- Function to determine if number of passenger on flight = number o
f coupon uplifted + number of passengers listed on FIMs (Flight Interruption Man
ifest) + number of passengers in Block Seat Agreement
Parameter:
-- pftda
-- pftnr
-- porac
-- pdstc
-- pcarr

*/
IS
vreturn boolean := true;
vlod number; -- number of pasenger on flight
vcol number; -- number of coupon uplifted
vfim number; -- number of passengers listed on FIMs
vbsa number; -- number of passengers in block seat agreements

vcount_cshr number;
vnpax number;
BEGIN
-- check normal flight/ code share flight
IF pocca is not null and pocft is not null then -- cshr flight
SELECT sum(nvl(npax,0)) into vnpax
FROM flpk
WHERE ltrim(rtrim(orac)) = ltrim(rtrim(porac))
and ltrim(rtrim(dstc)) = ltrim(rtrim(pdstc))
and ftda = to_date(pftda,'dd/mm/yy')
and ltrim(rtrim(occa)) = ltrim(rtrim(pocca))
and clean_ftnr(ocft) = clean_ftnr(pocft);

vlod := get_lod_count(pftda, pftnr, porac, pdstc, pcarr);
vcol := get_tot_col_cshr(porac, pdstc, pocft, pocca, pftda);

vfim := get_fim_col(porac, pdstc, pocft, pocca, pftda);
vbsa := get_bsa_type(porac, pdstc, pocft, pocca, pftda, 'ALL');
ELSE
SELECT sum(nvl(npax,0)) into vnpax
FROM flpk
WHERE ltrim(rtrim(orac)) = ltrim(rtrim(porac))
and ltrim(rtrim(dstc)) = ltrim(rtrim(pdstc))
and ftda = to_date(pftda,'dd/mm/yy')
and ltrim(rtrim(carr)) = ltrim(rtrim(pcarr))
and clean_ftnr(ftnr) = clean_ftnr(pftnr);

vlod := get_lod_count(pftda, pftnr, porac, pdstc, pcarr);
vcol := get_tot_col_cshr(porac, pdstc, pftnr, pcarr, pftda);

vfim := get_fim_col(porac, pdstc, pftnr, pcarr, pftda);
vbsa := get_bsa_type(porac, pdstc, pftnr, pcarr, pftda, 'ALL');
END IF;

if nvl(vlod,0) <> (nvl(vcol,0) + nvl(vnpax,0) + nvl(vfim,0) + nvl(vbsa,0)
) then
vreturn := false;
end if;

if vlod=0 and vcol=0 then
vreturn := false;
return vreturn;
end if;
RETURN vreturn;
END;
-----------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------
begin
open c2;
loop
fetch c2 into c2_rec;
exit when c2%notfound;
if is_flpk_balanced(to_date(c2_rec.ftda,'dd/mm/yyyy'), c2_rec.ftnr, c2_rec.
orac, c2_rec.dstc, c2_rec.carr, c2_rec.occa, c2_rec.ocft) then
DBMS_OUTPUT.PUT_LINE ( 'FTDA: '||c2_rec.ftda||' FTNR: '|| c2_rec.ftnr|
|' ORAC: '||c2_rec.orac||' DSTC: '||c2_rec.dstc||' CARR: ' ||c2_rec.carr );
/* if nvl(c2_rec.flpk_lck,'N')='N' then
-- lock flpk
update flpk set flpk_lck='Y' where current of c2;
end if;*/
-- else
-- DBMS_OUTPUT.PUT_LINE ( 'FAIL' );
end if;
end loop;
close c2;

end;

Вам также может понравиться