Преобразование 10-значных символьных данных в тип DB2 BIGINT с помощью DFSORT

Я хочу преобразовать 10-значное символьное поле, содержащее числовые данные, в 8-байтовый двоичный файл для вставки в поле DB2 BIGINT.

INPUT
-------
1531245800ABC
1531457890DEF

OUTPUT
-------
<8 byte numeric data>ABC
<8 byte numeric data>DEF

Загрузить карту

LOAD DATA                      
LOG NO                       
REPLACE                      
UNICODE  CCSID(01208,00000,00000)
SORTDEVT SYSDA               
SORTNUM 12                   
INTO TABLE                   
<TABLE-NAME>                
KEEPDICTIONARY               
(                               
QUOTEID   POSITION (1) 
BIGINT   
,                              
GEO                             
POSITION (     9  )  CHAR MIXED(3))      

person bp89    schedule 02.04.2016    source источник
comment
CAST(fld AS BIGINT) возвращает BIGINT   -  person Alex K.    schedule 02.04.2016
comment
У меня есть эти данные в файле ps(mainframe), поэтому я хочу сделать это с помощью dfsort!   -  person bp89    schedule 02.04.2016
comment
Вы можете выполнить CAST при загрузке, вам не нужны данные во внутреннем формате DB2. Если вы не можете сказать, почему.   -  person Bill Woodger    schedule 02.04.2016
comment
Возможно ли это в загрузочной карте? При этом возникла ошибка! Отредактировал вопрос с загрузочной картой.   -  person bp89    schedule 03.04.2016


Ответы (1)


Используйте символы DFSORT, чтобы упростить жизнь вам и будущим пользователям:

//TOBIGINT EXEC PGM=SORT 
//SYMNAMES DD * 
INPUT-CHARACTER-NUMERIC,1,10,ZD 
INPUT-CHARACTER-REST,*,3,CH 
//SYMNOUT DD SYSOUT=*
//SYSOUT   DD SYSOUT=* 
//SORTOUT  DD SYSOUT=* 
//SYSIN    DD * 
  OPTION COPY 

  INREC BUILD=(INPUT-CHARACTER-NUMERIC,
                TO=BI, 
                LENGTH=8, 
               INPUT-CHARACTER-REST) 
//SORTIN   DD * 
1531245800ABC 
1531457890DEF 

Или традиционное кодирование начала, длины, типа:

//TOBIGINT EXEC PGM=SORT 
//SYSOUT   DD SYSOUT=* 
//SORTOUT  DD SYSOUT=* 
//SYSIN    DD * 
  OPTION COPY 

  INREC BUILD=(1,10,ZD, 
                TO=BI, 
                LENGTH=8, 
                11,3) 
//SORTIN   DD * 
1531245800ABC 
1531457890DEF 

Вывод: X'000000005B44F4E8', за которым следует ABC, и X'000000005B483162', за которым следует DEF.

person Bill Woodger    schedule 02.04.2016