-- -- $Id$ -- -- Customer specific once-script DJIN#88086.sql. DEFINE thisfile = 'DJIN#88086.sql' DEFINE dbuser = '^FMD' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust('&dbuser') AS fcltcusterr FROM DUAL; WHENEVER SQLERROR CONTINUE; PROMPT &fcltcusterr SET DEFINE OFF ------ payload begin ------ SET SERVEROUTPUT ON size 1000000; DECLARE v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; BEGIN v_count := 0; -- Cursor over alle open bestelopdracht-items aangemaakt voor 01-01-2024 -- en gemarkeerd als 'Wachten op leverancier'; deze worden op 0 gesteld (of -- naar zover deelgeleverd) en op geleverd gezet! FOR rc IN (SELECT DISTINCT bo.bes_bestelopdr_key FROM bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bi, bes_bestelling b WHERE bo.bes_bestelopdr_status = 4 -- In bestelling AND bo.bes_bestelopdr_flag = 3 -- Wachten op leverancier AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key AND bi.bes_bestelling_key = b.bes_bestelling_key AND b.bes_bestelling_datum < TO_DATE ('01-01-2024', 'dd-mm-yyyy')) LOOP BEGIN v_errormsg := 'Leveren bestelopdr ' || TO_CHAR (rc.bes_bestelopdr_key); -- Verlaag wat besteld is naar wat deelgeleverd is (als er niets is -- deelgeleverd, dan wordt de bestelopdracht dus op 0 gesteld). UPDATE bes_bestelopdr_item SET bes_bestelopdr_item_aantal = COALESCE (bes_bestelopdr_item_aantalontv, 0) WHERE bes_bestelopdr_key = rc.bes_bestelopdr_key; bes.updatebestelopdrstatus (rc.bes_bestelopdr_key, NULL); v_count := v_count + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; DBMS_OUTPUT.PUT_LINE ('W: ' || v_errormsg); COMMIT; END; END LOOP; DBMS_OUTPUT.PUT_LINE ('S: ' || TO_CHAR (v_count) || ' bestelopdrachten geleverd (besteld=ontvangen)'); COMMIT; v_count := 0; -- Cursor loopt over alle bestelling-items met status 'Besteld' waarvan -- de bijbehorende bestelopdracht-items zijn geleverd; deze worden dan ook -- gesloten! FOR rc IN (SELECT DISTINCT b.bes_bestelling_key FROM bes_bestelling b WHERE b.bes_bestelling_status = 5 -- Besteld AND NOT EXISTS -- Geen onderliggende bestelopdracht(en) niet op Geleverd, dus alles Geleverd (aantalontv = aantal)! (SELECT 1 FROM bes_bestelling_item bi, bes_bestelopdr_item boi, bes_bestelopdr bo WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key AND bo.bes_bestelopdr_status != 6 -- Geleverd AND bi.bes_bestelling_key = b.bes_bestelling_key)) LOOP BEGIN v_errormsg := 'Leveren bestelling ' || TO_CHAR (rc.bes_bestelling_key); -- Sluit alle aanvraagregels af die nu geheel geleverd zijn. --UPDATE bes_bestelling_item -- SET bes_bestelling_item_aantalontv = bes_bestelling_item_aantal -- WHERE bes_bestelling_key = rc.bes_bestelling_key; bes.updatebestellingstatus (rc.bes_bestelling_key, NULL); v_count := v_count + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; DBMS_OUTPUT.PUT_LINE ('W: ' || v_errormsg); COMMIT; END; END LOOP; DBMS_OUTPUT.PUT_LINE ('S: ' || TO_CHAR (v_count) || ' bestellingen geleverd (aantallen ongewijzigd)'); COMMIT; END; / ------ payload end ------ SET DEFINE OFF BEGIN adm.systrackscriptId ('$Id$', 1); END; / COMMIT; SET ECHO OFF SPOOL OFF SET DEFINE ON PROMPT Logfile of this upgrade is: &fcltlogfile