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.
Attenzione
con FRQ(*MONTHLY) e una data fissa, il 31 per esempio, IBM dice che il job
non parte nei mesi che quel giorno non ce l'hanno: febbraio, aprile, giugno, settembre,
novembre. Per l'ultimo giorno di ogni mese la pagina del comando indica proprio
SCDDATE(*MONTHEND).
Rilasci. SCDDATE(*MONTHEND) è nella documentazione IBM di ADDJOBSCDE per 7.5.
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati