我想在 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
当我使用对象命令执行工作时,我看到操作系统将表识别为 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 的新表,操作系统会给我相同的 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)
我不喜欢每个表都由两个不同的名称标识的事实。我相信这会引起混淆。
我是否错过了这里的任何选项?
最佳答案
当你使用 SQL 创建表时,你也可以像这样指定系统名称:
create table MYLONGTABLENAMEFORTHISTABLE for system name MYTAB12345
(myval char(10))
当您想通过 DCL-F MYTAB12345 DISK(*EXT) USAGE(*INPUT)
规范访问它时,这将允许您指定可在 RPG 中使用的确切对象名称实例。
这并没有消除所有表都有两个名称的考虑,但它至少允许您控制名称以防止重复使用表名。除了坚持使用较短的表名或不使用 DCL-F
并仅使用 SQL 之外,我不知道有任何解决方案可以消除所有这些问题。不过,这并不能真正解决您最初尝试处理的问题。
关于ibm-midrange - 在 RPG 程序中使用长文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768269/