CREATE OR REPLACE PROCEDURE SQLTOOLS.CHGJOBMED ( IN MOVPCY VARCHAR(10) DEFAULT '*SAME', IN MEDCLS VARCHAR(10) DEFAULT '*SAME', IN RETENTION INTEGER DEFAULT 0 ) LANGUAGE SQL SPECIFIC SQLTOOLS.CHGJOBMED NOT DETERMINISTIC MODIFIES SQL DATA CALLED ON NULL INPUT SET OPTION ALWBLK = *ALLREAD, ALWCPYDTA = *OPTIMIZE, COMMIT = *NONE, DECRESULT = (31, 31, 00), DYNDFTCOL = *NO, DYNUSRPRF = *USER, SRTSEQ = *HEX BEGIN DECLARE TAPE CHAR(6); DECLARE NEWEXP VARCHAR(6); DECLARE DATFMT VARCHAR(10); DECLARE CMD VARCHAR(1000); DECLARE DAYOFMON INT; DECLARE FINE INT DEFAULT 0; DECLARE CURCHGJOBMED CURSOR FOR SELECT VOLUME_SERIAL, CASE WHEN RETENTION <> 9999 THEN TO_CHAR(CREATED + RETENTION DAYS, 'ddMMyy') ELSE '*PERM' END FROM QUSRBRM.MEDIA_INFO INNER JOIN QUSRBRM.QA1AMM ON VOLUME_SERIAL = TMCVSR INNER JOIN TABLE ( QSYS2.ACTIVE_JOB_INFO(DETAILED_INFO => 'NONE', JOB_NAME_FILTER => '*') ) ON TRIM(JOB_NAME) = TRIM(LPAD(TMJNBR, 6, '0') CONCAT '/' CONCAT TRIM(TMUSER) CONCAT '/' CONCAT TRIM(TMCJOB)); DECLARE CONTINUE HANDLER FOR NOT FOUND SET FINE = 1; VALUES DAY(CURRENT DATE) INTO DAYOFMON; IF DAYOFMON > 7 THEN RETURN; END IF; SELECT DATE_FORMAT INTO DATFMT FROM TABLE ( QSYS2.ACTIVE_JOB_INFO(DETAILED_INFO => 'ALL', JOB_NAME_FILTER => '*') ); CALL QSYS2.QCMDEXC('CHGJOB DATFMT(*DMY)'); OPEN CURCHGJOBMED; FETCH CURCHGJOBMED INTO TAPE, NEWEXP; WHILE FINE = 0 DO VALUES 'CHGMEDBRM VOL(' CONCAT TAPE CONCAT ') MEDCLS(' CONCAT MEDCLS CONCAT ') EXPDATE(' CONCAT NEWEXP CONCAT ') MOVPCY(' CONCAT MOVPCY CONCAT ')' INTO CMD; CALL SYSTOOLS.LPRINTF( TRIM(CMD) ); CALL QSYS2.QCMDEXC( TRIM(CMD) ); FETCH CURCHGJOBMED INTO TAPE, NEWEXP; END WHILE; CALL QSYS2.QCMDEXC( 'CHGJOB DATFMT(' CONCAT TRIM(DATFMT) CONCAT ')' ); END;