Chinaunix

标题: *CHRA 中*DEC数据的转换 急啊 [打印本页]

作者: jskyzz    时间: 2009-04-03 17:15
标题: *CHRA 中*DEC数据的转换 急啊
不好意思标题不知道怎么描述

在数据库中有 *dec 的一个字段Field1
在CL中因为特殊的原因读的时候是以*CHAR读的
现在想在CL中把*CHAR的再变回*dec 怎么做啊 ?

如 A 在数据库中是 1

CL读出来以后是*CHAR类型的 16进制是 001F
如何把这个在CL中变成 *DEC的 1 ?

ps:  
原先是 1  
用%bin的时候出来的是 31

[ 本帖最后由 jskyzz 于 2009-4-3 17:26 编辑 ]
作者: passthru    时间: 2009-04-03 18:33
首先,cl读出数据后,数据库还保留着数据,只要数据没有修改过。

如果用chart读出的数据,001F,再用x'001F'写回。
作者: jskyzz    时间: 2009-04-03 18:42
我现在需要使用 001F这个数据,需要拿他做运算

更郁闷的是

DCL &A  TYPE(*CHAR) LEN(2) VALUE(X'050F')
DCL &B  TYPE(*DEC)   LEN(3 0)

CHGVAR VAR(&B)  VALUE(%BIN(&A))

的时候错误 MCH1210

[ 本帖最后由 jskyzz 于 2009-4-3 18:45 编辑 ]
作者: guozhy    时间: 2009-04-04 01:19
X'050F' 转换为p类型,就是1295,你用 DEC(3 0) 存储当然溢出了。
作者: guozhy    时间: 2009-04-04 01:25
D VALUE@   S     3P0
     D CVT2DEC PR          EXTPROC(CVT2DECR)      
     D INPUT              3P0
     D OUTPUT           3P0
     D
     D CVT2DEC PI
     D INPUT              3P0
     D OUTPUT           3P0
     C***********************
     C EVAL       VALUE@=INPUT
     C EVAL       OUTPUT=VALUE@
     C Eval        *InLR = *On
编译成PGM ,dftgroup 选择为 *no

在CL中对数据转换时调用即可:
call pgm(CVT2DECR)   parm(&A  &B)

[ 本帖最后由 guozhy 于 2009-4-8 14:26 编辑 ]
作者: jskyzz    时间: 2009-04-04 09:17
原帖由 guozhy 于 2009-4-4 01:19 发表
X'050F' 转换为p类型,就是1295,你用 DEC(3 0) 存储当然溢出了。


多谢

汗   不知道什么是P类型
还有我需要CL的程序去转换一下  ~~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2