是否可以在默认情况下关闭记录级别检查的情况下在iSeries上创建SQL表?



我试图在不影响现有遗留RPG代码的情况下将DDS定义的表转换为DDL。如果我在SQL中重新创建表,然后手动关闭记录级别检查,我可以做到这一点。

想知道记录级别检查是否可以作为create语句或其他SQL命令的一部分以某种方式关闭

No.

此外,你不需要这样做。如果SQL创建的表没有得到与DDS定义的表相同的记录格式ID,那么您可能做错了什么。

我说可能是因为几年前有几个错误,记录格式ID没有正确创建。

现在,如果您想在DDL中添加列并重新定义,那么您需要做的是:

  1. 从DDS表(MYPF)中提取DDL
  2. 添加所需的任何内容到DDL,同时更改表的名称(MYPF_T)
  3. 将数据从MYPF复制到MYPF_T
  4. 将现有逻辑/视图/索引从MYPF重新指向MYPF_T;不包括任何新列。
  5. 重新创建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法详细论文

相关内容

  • 没有找到相关文章

最新更新