在RPG程序中使用长文件名

Mus*_*rge 3 rpgle db2-400 ibm-midrange

我想在RPG程序(OS V7.1或v7.2)中使用db2/SQL创建的长文件名.我无法使用传统DDS创建超过10个字符的表,但Db2/SQL允许我创建具有长文件名的表.例:

CREATE TABLE QTEMP.VERYLONGNAMETABLE (COLUMN1 CHAR (30) NOT NULL 
WITH DEFAULT)                                           
RCDFMT VERYRC                                      
Run Code Online (Sandbox Code Playgroud)

当我使用object命令工作时,我看到OS识别表不是VERYLONGNAMETABLE而是VERYL00001.

如果我尝试在RPG中使用VERYL00001名称,则可以:

         DCL-F VERYL00001 DISK(*EXT) USAGE(*INPUT)'
Run Code Online (Sandbox Code Playgroud)

但这失败了,因为RPG的10个字符限制:

         DCL-F VERYLONGNAMETABLE DISK(*EXT) USAGE(*INPUT)
Run Code Online (Sandbox Code Playgroud)

但我可以这样做,它给了我内部的长名称,但指向外部10个字符的短名称.

    DCL-F VERYLONGNAMETABLE  DISK(*EXT) USAGE(*INPUT)
         extfile('extdesc')
         extdesc('VERYL00001')  ;      
Run Code Online (Sandbox Code Playgroud)

令人担忧的是,如果我删除VERYL00001对象,并创建名为VERYLONGNAMETABLE_2的新表,OS会给我相同的VERYL00001名称.这非常令人担忧,因为它可能造成混乱.

我读到我可以做并使用ALIAS.

 CREATE ALIAS VERYLONG FOR VERYLONGNAMETABLE 
Run Code Online (Sandbox Code Playgroud)

然而,这会创建一个DDMF文件,如果我记得从过去的日子有性能和其他问题.

我也可以将(RNMOBJ)VERYL00001重命名为VERYLONG.那么至少我可以为想要查询长名称的用户提供长名称,并且仍然可以像这样在RPG中使用

      DCL-F VERYLONGNAMETABLE  DISK(*EXT) USAGE(*INPUT)
            extfile('extdesc')
          extdesc('VERYLONG')  ;     
Run Code Online (Sandbox Code Playgroud)

或者干脆:

      DCL-F VERYLONG  DISK(*EXT) USAGE(*INPUT)
Run Code Online (Sandbox Code Playgroud)

我不喜欢每个表都将由两个不同的名称标识的事实.我相信这会引起混淆.

我在这里错过了任何选择吗?

Pla*_*1st 5

使用SQL创建表时,还可以指定系统名称,如下所示:

create table MYLONGTABLENAMEFORTHISTABLE for system name MYTAB12345
(myval char(10))
Run Code Online (Sandbox Code Playgroud)

这将允许您指定可以在RPG中使用的确切对象名称,例如,当您想要通过DCL-F MYTAB12345 DISK(*EXT) USAGE(*INPUT)规范访问它时.

这并没有消除所有表都有两个名称的考虑,但它至少允许您控制名称以防止重用表名.我不知道有任何解决方案可以消除所有这些问题,而不是使用较短的表名或不DCL-F使用SQL而只是使用SQL.但这并没有真正解决您首先尝试处理的问题.