因为AS400
,我的DSPJRN
上有一个文件,我想查看JOESD
字段中的一些数据,这是来自日记的后期图像文件。这被定义为CCSID = 65535
的char。我想这是因为它是包含ccsid和数字字段的整个记录。
我可以使用substr()
从原始文件中获取实际字段。
在原始文件中,列定义为graphic(10) ccsid 13488
。多数民众赞成UCS-2
。
如果我hex(substr(joesd,522,20))
我得到004100530044...
的结果,依此类推,因此我知道它是正确的数据,但我无法将其显示为&# 39; ASD ...'
我尝试了graphic(substr(joesd,522,20),10,13488)
,但却出错the conversion from ccsid 65535 to 13488 isn't valid
。我不想转换它,但将其解释为其他ccsid
答案 0 :(得分:0)
GRAPHIC()
并未将CCSID视为parm。根据我的7.1参考,第三个参数是长度。
您使用的是哪个版本?
我认为CAST()
可能是一种解决方案,但它似乎无法发挥作用。
正如我所看到的,一种选择是构建一个用户定义的函数(UDF)来完成你需要的转换;可能使用iconv()
API。
另一种选择是将数据转储到格式正确的文件中。我使用DBU的DBUJRN实用程序。还有其他类似的选择。包括一个开源one(很遗憾,该描述是德语,但谷歌翻译确实足以找出下载源)。
实用程序基本上以相同的方式工作;实际上,您可以手动运行相同的过程。请尝试以下方法:
第1步(你正在做的DSPJRN)
DSPJRN <...> OUTFILE(MYLIB/MYJRNOUT)
步骤2 - 创建一个新文件,其中包含日记标题字段,后跟日记文件中的所有字段(MYFILE)
CREATE TABLE mylib/mytbl as
( select JOENTL, JOSEQN, JOCODE, JOENTT, JODATE,
JOTIME, JOJOB, JOUSER, JONBR, JOPGM, JOOBJ,
JOLIB, JOMBR, JOCTRR, JOFLAG, JOCCID,
JOINCDAT, JOMINESD, JORES,
m.*
from MYLIB/MYJRNOUT , MYLIB/MYFILE m
) with no data
步骤3 - 复制数据而不考虑格式差异。
CPYF FROMFILE(MYLIB/MYJRNOUT) TOFILE(MYLIB/MYTBL) MBROPT(*ADD) FMTOPT(*NOCHK)
您最终应将最初在JOESD中的数据拆分为适当的字段。
当然请注意,此技术一次只适用于一个文件。另外,请确保您只是转储* RCD条目,并且您可能想要跳过DELETE条目。