мы можем сравнить поля времени в SORT-карте JCL - PullRequest
1 голос
/ 29 сентября 2010

Предположим, у меня есть 12 позиций поля времени хранения записи в 8 байтов. Могу ли я сравнить его с текущей отметкой времени? Могу ли я сделать арифметические операции с этим полем, например, добавить час или вычесть несколько минут и т. Д. Ваши ответы будут высоко оценены. Спасибо!

Приложение .. для лучшего понимания:

Мне нужна ваша помощь в сравнении временных полей при записи записей с вывода. Например, у меня есть 12-я позиция временной метки хранения файла 8 байтов. Я хочу записать в выходной файл, когда отметка времени записи меньше или равна текущей отметке времени на час. В процессе достижения этого я застрял ниже:

INCLUDE COND=(12,8,??,GE,&TIME1-1),

что может быть представлением данных (вместо ?? для этого.)

Прежде всего, можем ли мы достичь этого с помощью SORT? Если это так, пожалуйста, дайте мне карту SORT (измените мою карту, если это возможно, иначе дай мне свою версию). А также, пожалуйста, поделитесь материалом / репо по сравнению времени и даты, а также по лучшей обработке. Заранее спасибо за помощь.

С уважением, Радж.

Ответы [ 2 ]

1 голос
/ 01 октября 2010

Я думаю, вижу, что вы пытаетесь сделать, но сомневаюсь, сработает ли это. Это мои мысли:

  • Я когда-либо видел только строку символов & TIME1 (c) , используемую для вывода. Например: OUTREC BUILD (1,11,12, & TIME1 (:)) поместит текущее время в формате ЧЧ: ММ: СС в выходную запись, начиная с позиции 12. Насколько мне известно, ВРЕМЯ нельзя использовать в выражении ICETOOL / DFSORT COND , как вы указали в своем вопросе.
  • Даже если TIME поддерживаются в операторах COND , операторы +/- не поддерживаются, как вы могли бы видел с ДАТА (например, ДАТА1 + 1 , чтобы получить текущую дату плюс 1 день). Добавление некоторой константы к TIME не поддерживается.
  • Задумывались ли вы над тем, что произойдет, если ваша работа будет выполняться несколько минут до полуночи? Добавление часа ко времени приводит к переносу на утро следующего дня. В этот момент вы нужно принять дату в condideration в COND.

Что-то, что может сработать: добавьте предварительный шаг для запуска REXX или какой-либо другой программы. Пусть эта программа генерировать все или часть INCLUDE операторы, используемые на следующем шаге ICETOOL. Вот пример процедуры REXX, которая создаст оператор INCLUDE , аналогичный приведенному в вашем вопросе. Запись записывается в файл, выделенный для DD CNTLREC:

 /* REXX */
 PULL DELTA  /* Number of hours to add to current time */
 PARSE VALUE TIME('N') WITH HH ':' MM ':' SS /* current time */
 HH = LEFT((HH + DELTA) // 24, 2, '0')  /* add DELTA, check rollover */
 QUEUE " INCLUDE COND=(12,8,CH,GE,C'"HH":"MM":"SS"'),"
 EXECIO * DISKR CNTLREC(FINIS
 EXIT

Назначьте этот файл соответствующему управляющему оператору ICETOOL DD, и он должен работать для вас.

Предупреждение: В этом примере не рассматриваются корректировки, которые могут быть требуется для параметров COND в случае смены позиции в полночь.

Примечание: Если вы сохранили вышеуказанную процедуру REXX в PDS как: «MY.REXX (FOO)», ваш предварительный шаг JCL будет выглядеть примерно так:

//RUNREXX   EXEC PGM=IKJEFT01           
//SYSEXEC  DD DSN=MY.REXX,DISP=SHR  
//SYSTSPRT DD SYSOUT=A                  
//SYSTSIN  DD *                         
%FOO
1                               
/*                                      
//

'1' после% FOO - это количество часов DELTA, указанное в процедуре.

0 голосов
/ 08 апреля 2013

Если ваш DFSORT достаточно актуален, то в октябре 2010 года DATE5 будет иметь эквивалент DATE4, но с микросекундами, поэтому, как и в случае с «временной меткой» DB2.1005 *

...