Schedulare un job l'ultimo giorno del mese

Accedi per salvare

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'è.

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati