ibm-midrange - 在 RPG 程序中使用长文件名

标签 ibm-midrange db2-400 rpgle

我想在 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/

相关文章:

sql - 如何在日期和时间之间运行查询?

java - 在 AS400 上显示 DB2 中的 BLOB 内容

ibm-midrange - 在 CLLE 中显示 QMODEL 序列的子例程

rpgle - 将参数传递给自由格式 RPG Linear-Main 程序时出现问题

ibm-midrange - Windows XP下使用map网盘访问AS400 IFS时反复提示输入用户名和密码

c# - 在 C# 中使用 EHLLAPI 从 IBM 个人通信 iSeries 获取字符串会得到字符串后跟垃圾

ibm-midrange - 带有预填充元素的 iSeries/IBM i 命令 (CMDSRC)

db2 - SQLRPGLE 程序 IBM 中的 SQLSTATE '08003'

db2 - 什么时候 DB2 声明的全局临时表会自动删除...?

arrays - 在 RPG 过程中接受未知大小的数组