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

时间:2015-09-15 20:55:56

标签: sql db2 ibm-midrange rpg

我试图将DDS定义的表转换为DDL,而不会影响现有的旧版RPG代码。 如果我在SQL中重新创建表,然后手动关闭记录级别检查,我可以这样做。

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

2 个答案:

答案 0 :(得分:2)

没有

除此之外你不应该这样做。如果您没有使用DDS定义的SQL创建的表获得相同的记录格式ID,那么您可能做错了。

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

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

  1. 从DDS表(MYPF)中提取DDL
  2. 添加DDL所需的内容,同时更改表名称(MYPF_T)
  3. 将数据从MYPF复制到MYPF_T
  4. 将现有的逻辑/视图/索引从MYPF重新定位到MYPF_T;不包括任何新列。
  5. 将MYPF重新创建为具有相同名称的逻辑;遗漏任何新栏目。
  6. 正确完成,现有对象的记录格式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 
    

答案 1 :(得分:1)

当你用sql表替换dds文件时我称之为Cruikshanking,因为Dan Cruikshank在其上写了一个paper

总结:创建一个ddl表。列出逻辑文件中的列,并将它们指向新的ddl表。创建一个逻辑文件,列出所有物理文件列,并将其指向新的ddl表。

注意执行crtdupobj的代码以及clrpfm或addpfm等成员的代码。

Detailed Cruikshank Method paper