использование длинных имен файлов в программах RPG - PullRequest
0 голосов
/ 11 октября 2018

Я хотел бы использовать созданное db2 / SQL длинное имя файла в программе RPG (OS V7.1 или v7.2).Я не могу создать таблицу с более чем 10 символами, используя устаревшие DDS, но Db2 / SQL позволяет мне создавать таблицы с длинными именами файлов.Пример:

CREATE TABLE QTEMP.VERYLONGNAMETABLE (COLUMN1 CHAR (30) NOT NULL 
WITH DEFAULT)                                           
RCDFMT VERYRC                                      

Когда я выполняю работу с командой объекта, я вижу, что ОС распознает таблицу не как VERYLONGNAMETABLE, а как VERYL00001.

Если я пытаюсь использовать имя VERYL00001 в RPG, это работает:

         DCL-F VERYL00001 DISK(*EXT) USAGE(*INPUT)'

, но это не удается, из-за ограничения в 10 символов RPG:

         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)

Я некак тот факт, что каждая таблица будет обозначаться двумя разными именами.Я уверен, что это вызовет путаницу.

Я что-то упустил здесь?

1 Ответ

0 голосов
/ 12 октября 2018

Когда вы создаете таблицу с использованием SQL, вы также можете указать системное имя следующим образом:

create table MYLONGTABLENAMEFORTHISTABLE for system name MYTAB12345
(myval char(10))

Это позволит вам указать точное имя объекта, которое можно использовать в RPG, когда вы хотитенапример, получить к нему доступ через спецификацию DCL-F MYTAB12345 DISK(*EXT) USAGE(*INPUT).

. Это не снимает предположения о том, что все таблицы будут иметь два имени, но, по крайней мере, позволяет контролировать имена, чтобы предотвратить повторное использование имен таблиц.Я не знаю ни одного решения, которое бы устраняло все эти проблемы, кроме того, чтобы придерживаться более коротких имен таблиц или не использовать DCL-F и просто использовать SQL.Это не решает проблему, с которой вы пытались справиться.

...