Автогенерация номеров AS/400

У меня есть поле в моем отображаемом файле "EMPID".

Это поле должно быть создано автоматически и защищено.

Если я должен использовать область данных, как именно мне включить это в мою rpg (не rpgle). Каковы другие возможные способы автоматической генерации чисел в rpg. Пожалуйста, объясните.

Повторное редактирование: использовалась область данных, и она работала как шарм:

Обратите внимание на приведенный ниже код:

           C*** ARATWO IS NAME OF DATA AREA OBJECT           
C           *NAMVAR   DEFN           ARATWO  40   
C           *LOCK     IN   ARATWO                 
C                     Z-ADDARATWO    EMP     40   
C                     ADD  1         EMP          
C                     Z-ADDEMP       ARATWO       
C                     OUT  ARATWO                 

Спасибо за помощь.


person techie    schedule 13.09.2012    source источник
comment
Так вы кодируете это в RPG3?   -  person Mike Wills    schedule 13.09.2012
comment
Вам нужно, чтобы поле сначала автоматически сгенерировалось на экране или просто в файле базы данных? Я полагаю, вы используете РПГ/400?   -  person WarrenT    schedule 13.09.2012
comment
@WarrenT Я хочу, чтобы на моем экране отображались значения, которые r увеличиваются в d PF, конечно. Был бы признателен, если бы можно было дать какой-либо намек на эти строки.   -  person techie    schedule 14.09.2012
comment
У меня есть несколько серьезных предложений. Разместите свой код. Если вы совсем запутались с кодом, попробуйте псевдокод. Если вы не можете придумать это, опубликуйте свою блок-схему / блок-схему. Это то, что я делаю, когда берусь за проект. Это помогает мне организовать свои мысли и сосредоточиться на том, что мне нужно выучить. Если вы собираетесь работать на платформе IBM среднего уровня, вам действительно нужно привыкнуть к поиску информации в информационном центре publib.boulder.ibm.com/eserver/ibmi.html Если вам что-то там непонятно, укажите конкретный пункт, и мы постараемся его прояснить.   -  person Buck Calabro    schedule 14.09.2012
comment
@BuckCalabro Проблема была решена с использованием области данных. Пожалуйста, просмотрите перередактирование.   -  person techie    schedule 18.09.2012


Ответы (3)


Вы можете использовать SQL в своей RPG. Две возможности: первая ПОСЛЕДОВАТЕЛЬНОСТЬ SQL CREATE SEQUENCE my_lib/my_sequence …..

посмотрите здесь http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2z10.doc.sqlref%2Fsrc%2Ftpc%2Fdb2z_sql_createsequence.htm< /а>

Второе: поле автоинкремента в PF (таблица). В DB2 SQL вы можете создать таблицу (физический файл) с полем, определенным как сгенерированное всегда как идентификатор. Пример:

create table MY_LIB/MY_FILE (                                        
    Id_Auto     int             not null generated always as identity,
    Filed2     int             not null with default,                
    Field3        char(10)        not null with default,                
    PRIMARY KEY (Id_Auto)  
);                         

Таким образом, каждая операция INSERT в этом файле автоматически увеличивает значение поля Id_Auto.

insert into MY_LIB/MY_FILE (Field2, Field3) values(10, 'Paolo');
set My_Var = IDENTITY_VAL_LOCAL()

После этих двух операций поле Id_Auto автоматически увеличивается, и вы получаете его значения в My_Var с помощью функции IDENTITY_VAL_LOCAL()

Чао

person paolo    schedule 14.09.2012
comment
Благодарим за помощь. Пожалуйста, ознакомьтесь с редакционными правками для использования с областью данных. - person techie; 18.09.2012

В главе 11 Руководства пользователя RPG есть примеры использования областей данных в RPG.

person Buck Calabro    schedule 13.09.2012

Если вы хотите использовать SQL в своей RPG-программе, я бы порекомендовал использовать объект DB2 Sequence (который на самом деле является скрытой областью данных) для назначения вашего EMPID.

Чтобы настроить это, вы можете использовать что-то вроде:

CREATE SEQUENCE GenEmpID as numeric (6,0) start with 10000;  -- pick your own start point

Тогда в вашей ролевой игре вы могли бы использовать такой оператор:

VALUES next value for GenEmpID 
  INTO :newkey

Значение в newkey может отображаться на вашем экране и может использоваться как значение EMPID в вашей записи, когда вы выполняете INSERT.

Этот метод позволяет избежать выполнения пустой команды INSERT только для того, чтобы позволить DB2 сгенерировать следующие значения ключа, а затем выполнить отдельное обновление для фактического заполнения пустой записи. Зачем выполнять две операции с базой данных, если можно выполнить только одну? Вместо этого мы только читаем и изменяем область данных, и способ, которым мы это делаем, заключается в одном вызове SQL, а не в использовании одного оператора RPG для выхода в ОС для чтения области данных, увеличения значения, за которым следует другой оператор RPG для снова зайдите в ОС и обновите значение. В общем, при прочих равных, чем меньше раз вам придется обращаться к операционной системе, тем лучше. Это позволяет DB2 и ОС оптимизировать для вас работу, иногда ниже уровня MI.

person WarrenT    schedule 15.09.2012
comment
Благодарим за помощь. Пожалуйста, ознакомьтесь с редакционными правками для использования с областью данных. - person techie; 18.09.2012