La schedulazione di sistema ha un valore apposito: non serve calcolare la data.
ADDJOBSCDE JOB(CHIUSURA) +
CMD(CALL PGM(PRODLIB/CHIUSURA)) +
FRQ(*MONTHLY) +
SCDDATE(*MONTHEND) +
SCDTIME(230000) +
JOBQ(QBATCH)
Per l'ultimo giorno lavorativo, invece, la schedulazione va lasciata giornaliera e il controllo va nel programma, perché "lavorativo" dipende dal calendario aziendale.
Esempio: l'ultimo giorno lavorativo
Questa è la richiesta che arriva subito dopo, e *MONTHEND non la copre: il 31 può cadere di
domenica, e la chiusura deve girare venerdì.
Non c'è un valore di sistema per questo, perché "lavorativo" dipende dal calendario aziendale: le festività locali, le chiusure, i ponti. La schedulazione resta giornaliera e la decisione va nel programma, contro una tabella che l'azienda ha quasi sempre già:
SELECT 1
FROM PRODLIB/CALENDAR
WHERE GIORNO = CURRENT DATE
AND LAVORATIVO = 'S'
AND NOT EXISTS (
SELECT 1 FROM PRODLIB/CALENDAR
WHERE GIORNO > CURRENT DATE
AND LAVORATIVO = 'S'
AND YEAR(GIORNO) = YEAR(CURRENT DATE)
AND MONTH(GIORNO) = MONTH(CURRENT DATE))
Si legge come la definizione stessa: oggi è lavorativo, e dopo oggi non ce n'è un altro in questo mese. Se la query restituisce una riga il programma prosegue, altrimenti esce.
La tabella dei giorni è la parte che va costruita una volta e mantenuta. Chi non ce l'ha finisce a scrivere in un programma le festività di quest'anno, e a rifarlo l'anno prossimo.
Suggerimento
*MONTHEND gestisce da solo febbraio e i mesi da trenta giorni. Prima
che esistesse si usavano script che calcolavano la data, e sbagliavano puntualmente ogni
anno bisestile.
Attenzione
SCDDATE e SCDTIME usano l'ora di sistema. Se il sistema non gestisce
l'ora legale come ti aspetti, un job schedulato alle 23:00 può girare un'ora prima o dopo
due volte l'anno: verifica QUTCOFFSET e QTIMZON.
Rilasci. SCDDATE(*MONTHEND) esiste da molto prima dei rilasci oggi supportati: se il
sistema è aggiornato a un rilascio ancora in supporto, c'è.
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati