0 оценок0% нашли этот документ полезным (0 голосов)
29 просмотров9 страниц
The document contains definitions for multiple Oracle PL/SQL functions:
- ADD_NUM_SLS() sums numbers from a configuration string parameter
- ADD_NUM() sums numbers separated by slashes in a string parameter
- GET_TOT_COL() queries various tables to return the total passenger count for a given flight
- get_lod_count() queries different data sources to return the passenger count based on the source type
- GET_TOT_COL_CSHR() returns the total passenger count while also counting shared bookings
The functions make various database queries and calls to other defined functions to calculate results.
The document contains definitions for multiple Oracle PL/SQL functions:
- ADD_NUM_SLS() sums numbers from a configuration string parameter
- ADD_NUM() sums numbers separated by slashes in a string parameter
- GET_TOT_COL() queries various tables to return the total passenger count for a given flight
- get_lod_count() queries different data sources to return the passenger count based on the source type
- GET_TOT_COL_CSHR() returns the total passenger count while also counting shared bookings
The functions make various database queries and calls to other defined functions to calculate results.
The document contains definitions for multiple Oracle PL/SQL functions:
- ADD_NUM_SLS() sums numbers from a configuration string parameter
- ADD_NUM() sums numbers separated by slashes in a string parameter
- GET_TOT_COL() queries various tables to return the total passenger count for a given flight
- get_lod_count() queries different data sources to return the passenger count based on the source type
- GET_TOT_COL_CSHR() returns the total passenger count while also counting shared bookings
The functions make various database queries and calls to other defined functions to calculate results.
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);
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;
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);
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);
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;