2012-09-13 41 views
0

我在顯示文件「EMPID」中有一個字段。自動生成號碼AS/400

該字段必須自動生成和保護。

如果我要使用數據區,我該如何將它包含在我的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     

感謝所有幫助。

+0

那麼你在RPG3中編碼? –

+0

你需要首先在屏幕上自動生成的字段,還是隻需要在數據庫文件中?我假設你正在使用RPG/400? – WarrenT

+0

我在做RPG 400 – techie

回答

3

你可以在RPG中使用SQL。 兩種可能性: 第一 SEQUENCE 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 OPER此文件上的自動遞增字段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()功能

+0

欣賞幫助。請參閱數據區的使用說明。 – techie

0

如果您願意使用SQL在RPG程序,然後我建議使用DB2 Sequence對象(實際上是封面下的數據區)來分配您的EMPID。

要這樣設置,你可以使用類似:

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

然後在你的RPG遊戲,你可以使用這樣的表述:

VALUES next value for GenEmpID 
    INTO :newkey 

中則newkey值可以去到你的屏幕,可以在您執行INSERT時用作記錄中的EMPID值。

此方法避免了爲了讓DB2生成下一個鍵值,然後執行單獨的UPDATE以實際填充空記錄而執行空INSERT。爲什麼只有兩個數據庫操作只能執行一個?相反,我們只讀&修改了一個數據區域,而我們這樣做的方式是使用一次SQL調用,而不是使用一個RPG語句出去操作系統來讀取數據區域,增加值,然後是另一個RPG語句再次出去到操作系統並更新值。一般而言,所有其他條件相同的情況下,您呼叫操作系統的次數越少越好。這允許DB2和OS爲您優化操作,有時低於MI級別。

+0

欣賞幫助。請參閱數據區的使用說明。 – techie