Код: Выделить всё
CREATE PROCEDURE LSOM02.GET_OTPR_PAYER (
in pdt_begin timestamp, -- дата начала периода запроса
in pdt_end timestamp, -- дата окончания периода запроса
in pkodpl integer, -- код плательщика
in pvis integer, -- 0-отправление/1-раскредитование
OUT P1 INTEGER, -- 0 – нормальное выполнение,
-- 1 – предупреждение,
-- 2 – ошибка SQL
OUT P2 INTEGER -- код ошибки/предупреждения
)
RUN OPTIONS 'NOTEST(NONE,*,*,*)' EXTERNAL NAME ' SPKBSH01'
LANGUAGE SQL
COLLID LSOM02
WLM ENVIRONMENT DB2DAPP1
DYNAMIC RESULT SET 1
NOT DETERMINISTIC
READS SQL DATA
STAY RESIDENT NO
PROGRAM TYPE MAIN
COMMIT ON RETURN NO
P1: BEGIN
-- Объявить указатель
DECLARE C1 CURSOR WITH RETURN FOR
SELECT oobdan.id as id,
oobdan.kodpl as kodpl,
oobdan.dto,
oobdan.sto as sto,
oobdan.stn as stn,
oobdan.stnp as stnp,
oobdan.nomd as nomd,
char(ovag.nomvag) as nomvag,
oobdan.vesgr as vesgr,
oobdan.kodgrnsi as kodgrnsi,
sum(oplat.sumplat) as summa,
oobdan.kodgo as kodgo,
oobdan.okpogo as okpogo,
oobdan.kodgp as kodgp,
oobdan.okpogp as okpogp,
oobdan.iskl as iskl,
oobdan.rmonth,
coalesce(omegper.strn,643) as strn,
0 as prin_vk,
ovag.gruzopod as gruzopod,
oobdan.doro as doro,
oobdan.dornp as dornp,
oobdan.dorn as dorn
FROM DOEK.ophconng ophconn
JOIN DOEK.oobdan oobdan on (ophconn.id_om=oobdan.id)
JOIN DOEK.ovag ovag on (ovag.id=oobdan.id)
JOIN DOEK.oplat oplat on (oplat.id=oobdan.id)
LEFT JOIN DOEK.omegper omegper on (omegper.id=oobdan.id)
WHERE ophconn.dtsoob>=pdt_begin and ophconn.dtsoob<pdt_end
and oobdan.kodpl=pkodpl and oobdan.vis=pvis
and oplat.prnachisl=1
--не затрагивать последние 30 минут
and ophconn.dtrec<=CURRENT_TIMESTAMP-30 MINUTES
group by
oobdan.id, oobdan.kodpl, oobdan.dto, oobdan.sto, oobdan.stn,
oobdan.stnp, oobdan.nomd, oobdan.katotp, char(ovag.nomvag),
oobdan.vesgr,
oobdan.kodgrnsi, oobdan.kodgrgng, oobdan.kodgo, oobdan.okpogo,
oobdan.kodgp, oobdan.okpogp, oobdan.iskl, oobdan.rmonth,
coalesce(omegper.strn,643), ovag.gruzopod, oobdan.doro, oobdan.dornp,
oobdan.dorn
union all
SELECT oobdan.id as id,
oobdan.kodpl as kodpl,
oobdan.dto,
oobdan.sto as sto,
oobdan.stn as stn,
oobdan.stnp as stnp,
oobdan.nomd as nomd,
oobdan.katotp as katotp,
okont.nomknt as nomvag,
oobdan.vesgr as vesgr,
oobdan.kodgrnsi as kodgrnsi,
oobdan.kodgrgng as kodgrgng,
sum(oplat.sumplat) as summa,
oobdan.kodgo as kodgo,
oobdan.okpogo as okpogo,
oobdan.kodgp as kodgp,
oobdan.okpogp as okpogp,
oobdan.iskl as iskl,
oobdan.rmonth,
coalesce(omegper.strn,643) as strn,
1 as prin_vk,
okont.gruzopod as gruzopod,
oobdan.doro as doro,
oobdan.dornp as dornp,
oobdan.dorn as dorn
FROM DOEK.ophconng ophconn
JOIN DOEK.oobdan oobdan on (ophconn.id_om=oobdan.id)
JOIN DOEK.okont okont on (okont.id=oobdan.id)
JOIN DOEK.oplat oplat on (oplat.id=oobdan.id)
LEFT JOIN DOEK.omegper omegper on (omegper.id=oobdan.id)
WHERE ophconn.dtsoob>=pdt_begin and ophconn.dtsoob<pdt_end
and oobdan.kodpl=pkodpl and oobdan.vis=pvis and oplat.prnachisl=1
and ophconn.dtrec<=CURRENT_TIMESTAMP-30 MINUTES
group by
oobdan.id, oobdan.kodpl, oobdan.dto, oobdan.sto, oobdan.stn,
oobdan.stnp,
oobdan.nomd, oobdan.katotp, okont.nomknt, oobdan.vesgr,
oobdan.kodgrnsi,
oobdan.kodgrgng, oobdan.kodgo, oobdan.okpogo, oobdan.kodgp,
oobdan.okpogp, oobdan.iskl, oobdan.rmonth,
coalesce(omegper.strn,643),
okont.gruzopod, oobdan.doro, oobdan.dornp, oobdan.dorn
FOR READ ONLY WITH UR;
-- Декларация EXIT-боков
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SELECT 2, SQLCODE
INTO P1, P2
FROM SYSIBM.SYSDUMMY1;
DECLARE EXIT HANDLER FOR SQLWARNING
SELECT 1, SQLCODE
INTO P1, P2
FROM SYSIBM.SYSDUMMY1;
---------------------------------------------------------------
-- Присвоить значение возвращаемым переменным
SET P1 = 0;
SET P2 = 0;
-- Указатель оставлен открытым для программы клиента
OPEN C1;
END P1