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)
我不喜欢每个表都将由两个不同的名称标识的事实.我相信这会引起混淆.
我在这里错过了任何选择吗?
使用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.但这并没有真正解决您首先尝试处理的问题.
归档时间: |
|
查看次数: |
240 次 |
最近记录: |