我试图在不影响现有遗留RPG代码的情况下将DDS定义的表转换为DDL。如果我在SQL中重新创建表,然后手动关闭记录级别检查,我可以做到这一点。
想知道记录级别检查是否可以作为create语句或其他SQL命令的一部分以某种方式关闭
No.
此外,你不需要这样做。如果SQL创建的表没有得到与DDS定义的表相同的记录格式ID,那么您可能做错了什么。
我说可能是因为几年前有几个错误,记录格式ID没有正确创建。
现在,如果您想在DDL中添加列并重新定义,那么您需要做的是:
- 从DDS表(MYPF)中提取DDL
- 添加所需的任何内容到DDL,同时更改表的名称(MYPF_T)
- 将数据从MYPF复制到MYPF_T
- 将现有逻辑/视图/索引从MYPF重新指向MYPF_T;不包括任何新列。
- 重新创建MYPF作为具有相同名称的逻辑;
如果操作正确,现有对象的记录格式id都不会改变;因此不需要重新编译现有的RPG程序。
步骤4和5是关键。许多现有的逻辑可能共享现有的PF记录格式,如下所示:
A R MYPFR PFILE(MYPF)
A K ALTKEY
您希望将其更改为显式地包括PF中的原始列:
A R MYPFR PFILE(MYPF_T)
A MYKEY R
A ALTKEY R
A FLD3 R
A FLD4 R
A <...>
A K ALTKEY
注意文件级别标识符将是不同的。
Data Base File Attributes
Externally described file . . . . . . . . . : Yes
SQL file type . . . . . . . . . . . . . . . : TABLE
File level identifier . . . . . . . . . . . : 1121222233155
很好,级别检查是由记录格式的格式级别标识符
差异引起的。Record Format List
Record Format Level
Format Fields Length Identifier
IORITEM1 114 541 2FED88D05AB32
当你用sql表代替dds文件时,我称之为Cruikshanking,因为Dan Cruikshank写了一篇关于它的论文。
Summary:创建一个ddl表。列出逻辑文件中的列,并将它们指向新的ddl表。创建一个逻辑文件,列出所有物理文件列,并将其指向新的ddl表。
注意执行crtdupobj和任何带有clrpfm或addpfm成员的代码。
Cruikshank法详细论文