END TRANSACTION

END [OFTRANSACTION [operand1 ]

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:ACCEPT/REJECT | AT BREAK | AT START OF DATA | AT END OF DATA | BACKOUT TRANSACTION | BEFORE BREAK PROCESSING | DELETE | FIND | GET | GET SAME | GET TRANSACTION DATA | FIND HISTOGRAM | LIMIT | PASSW | PERFORM BREAK PROCESSING | READ | RETRY | STORE | UPDATE

関連機能グループ:データベースへのアクセスと更新


関数

END TRANSACTION ステートメントは、論理トランザクションの終了を示すために使用します。論理トランザクションは、データベースに含まれている情報の論理的一貫性を保証するために、完全に実行される必要がある最小の作業論理ユニットです。この定義はユーザーが行います。

END TRANSACTION ステートメントが正しく実行されると、後続のユーザー、Natural、データベース、またはオペレーティングシステムによる中断に関係なく、トランザクション中のすべての更新処理をデータベースに対して物理的に適用することが保証されます。END TRANSACTION ステートメントが正しく終了しなかった場合、トランザクション中の更新処理は自動的にバックアウトされます。

また、END TRANSACTION ステートメントでは、トランザクション中にホールド状態となっていたすべてのレコードが解放されます。

END TRANSACTION ステートメントは、論理条件に基づいて実行できます。

詳細については、『プログラミングガイド』の「データベース更新 - トランザクション処理」セクションを参照してください。

制限事項

このステートメントを、Entire System Server で使用することはできません。

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S     N A U N P I F B D T         ×

構文要素の説明:

構文要素 説明
operand1
トランザクションデータの保存:

Adabas データベースに適用されるトランザクションに対して、ユーザーは、このステートメントを使用して、トランザクション関連情報を保存することもできます。ただし、トランザクションデータは 2000 バイトを超えないようにする必要があります。トランザクションデータは、GET TRANSACTION DATA ステートメントで読み込むことができます。

トランザクションデータは、Natural プロファイルパラメータ ETDB で指定したデータベースに書き込まれます。

ETDB パラメータを指定していない場合、トランザクションデータは、プロファイルパラメータ UDB で指定したデータベースに書き込まれます(メインフレーム環境を除く)。メインフレーム環境では、トランザクションデータは、Natural Security システムファイル(FSEC)が存在するデータベースに書き込まれます。FSEC を指定していない場合、Natural システムファイル(FNAT)と同じであるとみなされます。Natural Security をインストールしていない場合は、トランザクションデータは FNAT が存在するデータベースに書き込まれます。

関連データベース

トランザクションデータ(operand1)が指定されていない END TRANSACTION ステートメントは、Natural の制御下で、データベーストランザクションが行われたときにのみ実行されます。Natural プロファイルパラメータ ET の設定により、ステートメントがどのように実行されるかが決まります。ET=OFF を指定すると、トランザクションの影響を受けたデータベースに対してのみ実行されます。ET=ON を指定すると、最後の BACKOUT TRANSACTION または END TRANSACTION ステートメントの実行以後に参照された、全データベースに対して実行されます。

トランザクションデータ(operand1)が with END TRANSACTION ステートメントは常に実行され、データベースにトランザクションデータが格納されます(下記のセクションを参照)。また、他のどのデータベースに対して END TRANSACTION ステートメントが実行されるかは、ET パラメータの設定で決まります(上記を参照)。

データベース固有の考慮事項

SQL データベース ほとんどの SQL データベースは作業の論理ユニットが終了するときにすべてのカーソルを閉じるため、END TRANSACTION ステートメントをデータベースの更新処理ループ内に指定することはできません。このようなループの後に指定する必要があります。
XML データベース END TRANSACTION ステートメントをデータベースの更新処理ループ内に指定することはできません。このようなループの後に指定する必要があります。

例 1 - END TRANSACTION

** Example 'ETREX1': END TRANSACTION                                    
**                                                                      
** CAUTION: Executing this example will modify the database records!    
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 COUNTRY                                                             
END-DEFINE                                                              
*                                                                       
FIND EMPLOY-VIEW WITH CITY = 'BOSTON'                                   
  ASSIGN COUNTRY = 'USA'                                                
  UPDATE                                                                
  END TRANSACTION                                                      
  /*                                                                    
  AT END OF DATA                                                        
    WRITE NOTITLE *NUMBER 'RECORDS UPDATED'                             
  END-ENDDATA                                                           
  /* 
END-FIND 
END

プログラム ETREX1 の出力:

7 RECORDS UPDATED

例 2 - ET データを指定した END TRANSACTION

** Example 'ETREX2': END TRANSACTION (with ET data)                     
**                                                                      
** CAUTION: Executing this example will modify the database records!    
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 FIRST-NAME                                                          
  2 CITY                                                                
*                                                                       
1 #PERS-NR (A8) INIT <' '>                                              
END-DEFINE                                                              
*                                                                       
REPEAT                                                                  
  INPUT 'ENTER PERSONNEL NUMBER TO BE UPDATED:' #PERS-NR                
  IF #PERS-NR = ' '                                                     
    ESCAPE BOTTOM                                                       
  END-IF                                                                
  /*                                        
  FIND EMPLOY-VIEW PERSONNEL-ID = #PERS-NR  
    INPUT (AD=M)    NAME / FIRST-NAME / CITY
    UPDATE                                  
    END TRANSACTION #PERS-NR                
  END-FIND                                  
  /*                                        
END-REPEAT                                  
END

プログラム ETREX2 の出力:

ENTER PERSONNEL NUMBER TO BE UPDATED: 20027800

社員番号を入力して確認した後:

NAME LAWLER
FIRST-NAME SUNNY
CITY MILWAUKEE