Db2 for I: Cpyf *nochk emulation



在 IBM i 系统中,有一种方法可以使用Cpyf *nochk将 从结构化文件复制到没有结构的文件。

如何使用 sql 完成?

答案可能是"你不能",如果你使用的是DDL定义的表,则不是。问题是*NOCHK只是像平面文件一样将数据转储到文件中。用CRTPF定义的文件,无论它们有源,还是程序定义的,在读取之前都不关心坏数据,所以它们可以包含坏数据。事实上,如果您为文件使用程序定义,您甚至可以从文件中读取错误数据。

但是,SQL 表(使用 DDL 定义的表(不能包含错误数据。无论您如何编写数据,数据库都会在写入时验证数据。即使是CPYF命令的*NOCHK选项也不能强制将错误数据强制到 SQL 表中。

真的没有一个简单的方法

最接近的是使用 CONCAT 构建一个大字符串......

insert into flatfile
select mycharfld1
concat cast(myvchar as char(20))
concat digits(zonedFld3)
from mytable

这适用于固定长度、varchar(如果转换为字符(和分区十进制......

打包十进制会有问题。

我见过用户定义的函数,它们可以返回构成压缩十进制的二进制字符串......但它非常丑陋

我质疑你为什么认为你需要这样做。

您可以使用 QSYS2。用于执行操作系统命令的 QCMDEXC 存储过程。

例:

call qsys2.qcmdexc ( 'CPYF FROMFILE(QTEMP/FILE1( TOFILE(QTEMP/FILE2( MBROPT(*replace( FMTOPT(*NOCHK(' (

最新更新