0

表示ファイル「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                 

すべての援助に感謝します。

4

3 に答える 3

3

RPG で SQL を使用できます。2 つの可能性: 最初の 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

2 番目: PF (テーブル) の自動インクリメント フィールド DB2 SQL では、常に ID として生成されるように定義されたフィールドを持つテーブル (物理ファイル) を作成できます。

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()

IDENTITY_VAL_LOCAL()これらの 2 つの操作の後、Id_Auto フィールドは自動的にインクリメントされ、関数を使用して My_Var で値を取得します。

チャオ

于 2012-09-14T07:31:23.723 に答える
1

RPG ユーザーズ・ガイドの第 11 章には、 RPG でのデータ域の使用例が記載されています。

于 2012-09-13T13:27:17.753 に答える
0

RPG プログラムで SQL を使用する場合は、DB2 シーケンス オブジェクト (実際には内部のデータ領域) を使用して 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 に次のキー値を生成させるためだけに空の INSERT を実行してから、別の UPDATE を実行して実際に空のレコードに値を入力することを回避します。データベース操作は 1 回しかできないのに、なぜ 2 回行うのでしょうか。代わりに、データ領域の読み取りと変更のみを行います。これを行う方法は、1 つの RPG ステートメントを使用して OS に出てデータ領域を読み取り、値をインクリメントし、その後に別の RPG ステートメントを使用するのではなく、SQL を 1 回呼び出すことです。再度 OS に出て、値を更新します。一般に、他のすべての条件が同じであれば、オペレーティング システムを呼び出さなければならない回数が少ないほど良い結果が得られます。これにより、DB2 と OS は、場合によっては MI レベル以下で操作を最適化できます。

于 2012-09-15T05:25:39.333 に答える