我想在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
当我处理对象命令时,我看到OS将表识别为VERYL00001,而不是VERYLONGNAMETABLE。
如果我尝试在RPG中使用VERYL00001名称,则会起作用:
DCL-F VERYL00001 DISK(*EXT) USAGE(*INPUT)'
但这失败,因为RPG的10个字符限制:
DCL-F VERYLONGNAMETABLE DISK(*EXT) USAGE(*INPUT)
但是我可以这样做,这给了我内部长名,但指向外部10个字符的短名。
DCL-F VERYLONGNAMETABLE DISK(*EXT) USAGE(*INPUT)
extfile('extdesc')
extdesc('VERYL00001') ;
与此相关的令人担忧的事情是,如果我删除VERYL00001对象,并创建名为VERYLONGNAMETABLE_2的新表,则OS会给我相同的VERYL00001名称。这很令人担忧,因为它可能引起混乱。
我了解到我可以使用ALIAS。
CREATE ALIAS VERYLONG FOR VERYLONGNAMETABLE
但这会创建一个DDMF文件,如果我记得从前有性能和其他问题。
我还可以将(RNMOBJ)VERYL00001重命名为VERYLONG。然后,至少我可以为想要查询长名并仍然在RPG中使用的用户提供长名
DCL-F VERYLONGNAMETABLE DISK(*EXT) USAGE(*INPUT)
extfile('extdesc')
extdesc('VERYLONG') ;
或简单地:
DCL-F VERYLONG DISK(*EXT) USAGE(*INPUT)
我不喜欢每个表都由两个不同的名称标识这一事实。我相信这会引起混乱。
我在这里错过了任何选择吗?
答案 0 :(得分:5)
使用SQL创建表时,还可以像这样指定系统名称:
create table MYLONGTABLENAMEFORTHISTABLE for system name MYTAB12345
(myval char(10))
这将允许您指定要通过例如DCL-F MYTAB12345 DISK(*EXT) USAGE(*INPUT)
规范访问RPG时可以在RPG中使用的确切对象名称。
这不会消除所有表都具有两个名称的考虑,但至少允许您控制名称以防止重用表名称。我不知道有什么解决方案可以消除所有这些问题,除了坚持使用较短的表名或不使用DCL-F
而不是仅使用SQL。但这并不能真正解决您最初试图解决的问题。