CREATE PROCEDURE "demoadm".b_perskto() DEFINE err_id int; DEFINE err_sql int; DEFINE err_isam int; DEFINE err_txt varchar(150,0); DEFINE err_msg varchar(250,0); DEFINE i int; DEFINE pv_action char(1); DEFINE pv_mandant char(2); DEFINE pv_pkto char(15); DEFINE pv_jahr decimal(4,0); DEFINE pv_periode decimal(2,0); DEFINE pv_soll decimal(13,2); DEFINE pv_haben decimal(13,2); BEGIN WORK; SET LOCK MODE TO WAIT 10; BEGIN ON EXCEPTION SET err_sql, err_isam, err_txt LET err_msg = 'ERR['||err_sql||','||err_isam||','||err_id||']:'||err_txt; SYSTEM 'echo "B_perskto: '||err_msg||'" >> /var/tmp/log.dwb'; END EXCEPTION; FOREACH dw_curs1 FOR SELECT er_id, lv_action, lv_mandant, lv_pkto, lv_jahr, lv_periode, lv_soll, lv_haben INTO err_id, pv_action, pv_mandant, pv_pkto, pv_jahr, pv_periode, pv_soll, pv_haben FROM DWE_perskto l ON EXCEPTION UPDATE DWE_perskto SET er_retry = er_retry + 1 WHERE er_id = err_id ; END EXCEPTION; IF (pv_action = 'I') THEN INSERT INTO sr_sh_pkto ( mandant, pkto_nr, jahr, periode, soll, haben ) VALUES ( pv_mandant, pv_pkto, pv_jahr, pv_periode, pv_soll, pv_haben ); ELIF (pv_action = 'D') AND (pv_periode = 99) THEN DELETE FROM sr_sh_pkto WHERE (pkto_nr = pv_pkto) AND (mandant = pv_mandant) AND ((jahr = pv_jahr) OR (jahr = pv_jahr-1)) ; ELIF ((pv_action = 'D') AND (pv_periode < 20)) OR ((pv_soll = 0) AND (pv_haben = 0) AND (pv_periode <> 0)) THEN DELETE FROM sr_sh_pkto WHERE (pkto_nr = pv_pkto) AND (mandant = pv_mandant) AND (jahr = pv_jahr) AND (periode = pv_periode) ; ELSE -- it must be update UPDATE sr_sh_pkto SET soll = pv_soll, haben = pv_haben WHERE (pkto_nr = pv_pkto) AND (mandant = pv_mandant) AND (jahr = pv_jahr) AND (periode = pv_periode) ; IF DBINFO('sqlca.sqlerrd2') < 1 THEN -- No rows updated INSERT INTO sr_sh_pkto ( mandant, pkto_nr, jahr, periode, soll, haben ) VALUES ( pv_mandant, pv_pkto, pv_jahr, pv_periode, pv_soll, pv_haben ); END IF END IF DELETE FROM DWE_perskto WHERE CURRENT OF dw_curs1; END FOREACH END SET LOCK MODE TO NOT WAIT; COMMIT WORK; END PROCEDURE
HTML-Autor: Rohloff, Datenbank: demodb, Datenstand: 31.05.00 17:07