Db2 for I:Cpyf*nochk仿真

Db2 for I:Cpyf*nochk仿真,db2,ibm-midrange,db2-400,Db2,Ibm Midrange,Db2 400,在IBM i系统中,可以使用Cpyf*nochk将结构化文件复制到无结构文件 如何使用sql实现这一点 真的没有一个简单的方法 最接近的方法是使用CONCAT构建一个大字符串 insert into flatfile select mycharfld1 concat cast(myvchar as char(20)) concat digits(zonedFld3) from mytable 这适用于固定长度、varchar(如果强制转换为char)和分区

在IBM i系统中,可以使用
Cpyf*nochk
将结构化文件复制到无结构文件


如何使用sql实现这一点

真的没有一个简单的方法

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

insert into flatfile
 select mycharfld1
        concat cast(myvchar as char(20))
        concat digits(zonedFld3)
  from mytable
这适用于固定长度、varchar(如果强制转换为char)和分区十进制

压缩小数将有问题

我见过一些用户定义的函数,它们可以返回组成压缩十进制数的二进制字符串……但这非常难看


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

您可以使用QSYS2.QCMDEXC存储过程来执行OS命令

例如:

调用qsys2.qcmdex('CPYF FROMFILE(QTEMP/FILE1)TOFILE(QTEMP/FILE2)MBROPT(*replace)FMTOPT(*NOCHK)

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

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