【问题标题】:Is it possible to create a SQL table on iSeries with record level checking turned off by default?是否可以在默认情况下关闭记录级别检查的情况下在 iSeries 上创建 SQL 表?
【发布时间】:2015-09-15 20:55:56
【问题描述】:

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

想知道是否可以在创建语句或其他 SQL 命令中以某种方式关闭记录级别检查。

【问题讨论】:

  • 简短回答是否定的。但是你有一些真的真的真的很好的理由让你必须进行记录级别的检查吗? (我个人甚至可以想到的唯一可接受的原因是您没有 RPG 源,因此无法重新编译。)
  • 原因是为了避免由于从 DDS -> DDL 的变化而不得不重新编译 RPG 程序。经过简要回顾,@Danny117 下面建议的 Cruikshanking 方法似乎也可以通过在 RPG 程序和 SQL 创建的表之间使用逻辑文件来实现这一点。

标签: sql db2 ibm-midrange rpg


【解决方案1】:

没有。

除了你不应该需要。如果您使用 SQL 创建的表获得的记录格式 ID 与使用 DDS 定义的表不同,那么您可能做错了。

我说可能是因为几年前存在一些错误,即记录格式 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 

【讨论】:

  • 这是否处理当前 DDS 文件已经与使用它的 RPG 程序“不匹配”的情况?换句话说,如果突然打开关卡检查,会不会出现已经运行无错误的现有RPG程序突然开始产生错误消息的情况?你是说建立一个伪装成旧PF的新LF可以解决这个问题吗? (对我来说,这比简单地重新编译 RPG 程序要多得多,但是,嘿,我猜有些人没有重新编译的源代码。)
  • 不,如果它已经坏了,它仍然是坏的。但是您可以关闭对 MYPF 逻辑的级别检查,它会像现在一样工作。重新编译不是问题,尤其是如果您像我一样拥有 CMS。问题是即使我所做的只是重新编译程序,我真的应该测试它。这就是节省的时间。
【解决方案2】:

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

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

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

Detailed Cruikshank Method paper

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多