Что нам нужно, так это то, что вам не нужно ничего перекомпилировать, просто добавляя столбец (или увеличивая размер столбца и т. Д.), - но не рискуя целостностью данных.
Добавление столбцаэто просто, изменить размер - это другая история ...
Вам нужен слой, который отделяет ваши программы RPG от физического макета данных.
Просто сделайте две вещи
- Определите все LF с явным форматом
- У всех ваших программ RPG есть доступ через LF вместо доступа через PF.
, чтобы вы могли иметь
A* My Physical file
A UNIQUE
A R MYPFR
A MYKEY 3A COLHDG('Key Field')
A FLD1 10A COLHDG('field 1')
A FLD2 15A COLHDG('field 2')
A FLD3 20A COLHDG('field 3')
A K MYKEY
В вашей логике явно перечислите включенные поля ...
A UNIQUE
A R MYLFR PFILE(MYPF)
A MYKEY
A FLD1
A FLD2
A FLD3
A K FLD1
То, что вы не хотите хотите иметь, - это LF, автоматически использующий формат PF.
A UNIQUE
A R MYLFR PFILE(MYPF)
A K FLD1
Теперь, когда вы добавляете столбец в PF, просто оставьте все существующие LF без изменений.Таким образом, их формат не изменится, и вам не нужно будет перекомпилировать любые программы RPG даже с включенной проверкой уровня .
Вы можете определить новый LF, включающий новый столбецдля использования любыми RPG-программами, которым необходим доступ к новому столбцу.
да, со временем у вас будет больше логики.Но пока «новая» логика использует тот же ключ, что и существующий, она не требует никаких ресурсов, кроме нескольких байт дискового пространства.Поскольку «новая» логика будет использовать существующий путь доступа.А сохранение / поддержание пути доступа - вот что потребляет ресурсы в i.
Переход к этой настройке также не так уж и сложен.
- Создайте новый PF с новым именем
- Создайте новый LF с существующим именем PF
- обновите существующий LF, чтобы он указывал на новый PF и явноперечислить столбцы.
Фактически вы можете использовать SQL вместо DDS для шага 1, это позволяет вам использовать некоторые из новых функций только для SQL базы данных.
IBM Redbook Модернизация приложений IBM i от базы данных до пользовательского интерфейса и всего, что между детализирует подход.
Но идея о том, чтобы приложения работали через LF-уровень, существует очень долго.
Изменение размера
Лучший способ справиться с увеличением размера поля - добавить новую версию столбца с большим размером и использовать триггер БД, чтобы сохранить исходныймаленькая версия и большая версия в синхронизации.Конечно, вам нужно решить, что делать, когда значение помещается в больший столбец, который не помещается в меньший.