UPDATE

ストラクチャードモード構文

UPDATE [RECORD] [IN] [STATEMENT] [(r)]

レポーティングモード構文

UPDATE [RECORD] [IN] [STATEMENT] [(r)]        
             
 

SET

     
  WITH

SAME [RECORD]

  USING {operand1=operand2}

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

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

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

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


関数

UPDATE ステートメントは、データベースレコードの 1 つ以上のフィールドを更新するために使用します。更新するレコードは、FINDGETREAD(または Adabas の場合は STORE)ステートメントで事前に選択されている必要があります。

ホールド状態

UPDATE ステートメントの使用により、対応する FINDREAD ステートメントで選択された各レコードは排他的ホールドの状態になります。

詳細については、「レコードホールドロジック」(『プログラミングガイド』)を参照してください。

制限

UPDATE ステートメント

  • を、更新するレコードを選択するステートメントと同一行に入力しないでください。

  • は Entire System Server ビューには適用できません。

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

SQL

UPDATE ステートメントは、データベーステーブルの行を更新するために使用できます。このステートメントは SQL の UPDATE WHERE CURRENT OF CURSOR位置決め UPDATE)に相当し、最後に読み込まれた行のみを更新できます。

ほとんどの SQL データベースで、FIND SORTED BY ステートメントや READ LOGICAL ステートメントによって読み込まれた行は更新できません。

XML

XML データベースでは UPDATE ステートメントを使用できません。

構文説明

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

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

構文要素の説明:

構文要素 説明
(r)
ステートメント参照:

表記 (r) を使用して、更新するレコードが選択されたステートメントを示すことができます。r は、ソースコード行番号またはステートメントラベルとして指定できます。

参照指定がなければ、UPDATE ステートメントでは、一番内側のアクティブな READ または FIND 処理ループが参照されます。アクティブな READ または FIND ループがない場合、このステートメントより前の最後の GET(または STORE)ステートメントが参照されます。

注意:
UPDATE ステートメントは、参照している READ または FIND ループ内に指定する必要があります。

USING SAME
USING SAME 節:

この節は、DEFINE DATA ステートメントを使用している場合は許可されません。UPDATE ステートメントは DEFINE DATA ステートメント内の定義に従って常にビュー全体を参照するからです。

レコードバッファまたはフォーマットバッファのレイアウトは、OBTAIN ステートメントを使用して宣言できます。

USING SAME はレポーティングモードで使用し、UPDATE ステートメントが参照するステートメントで読み込まれたフィールドと同じフィールドを更新に使用することを示します。この場合、各データベースフィールドに割り当てられた最新の値がフィールドの更新に使用されます。新しい値の割り当てがなければ、古い値が使用されます。

更新するフィールドがマルチプルバリューフィールドやピリオディックグループの配列範囲で、この配列範囲に変数インデックスを使用する場合、最新の範囲が更新されます。つまり、レコードが読み込まれた後で、かつ UPDATE USING SAME(レポーティングモード)または UPDATE(ストラクチャードモード)の各ステートメントの実行前にインデックス変数が変更されると、更新される範囲は読み込み時の範囲と同じではなくなります。

SET/WITH operand1=operand2
SET/HOLD 節:

この節は、レポーティングモードで更新するフィールドと値を指定するために使用します。

この節は、DEFINE DATA ステートメントを使用している場合は許可されません。UPDATE ステートメントは DEFINE DATA ステートメント内の定義に従って常にビュー全体を参照するからです。

** Example 'UPDEX1S': UPDATE (structured mode)                          
**                                                                      
** CAUTION: Executing this example will modify the database records!    
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
  2 FIRST-NAME                                                          
  2 CITY                                                                
*                                                                       
1 #NAME (A20)                                                           
END-DEFINE                                                              
*                                                                       
INPUT 'ENTER A NAME:' #NAME (AD=M)                                      
IF #NAME = ' '                                                          
  STOP                                                                  
END-IF                                                                  
*                                                                       
FIND EMPLOY-VIEW WITH NAME = #NAME                                      
  IF NO RECORDS FOUND                      
    REINPUT WITH 'NO RECORDS FOUND'  MARK 1
  END-NOREC                                
  INPUT 'NAME:      ' NAME (AD=O) /        
        'FIRST NAME:' FIRST-NAME (AD=M) /  
        'CITY:      ' CITY (AD=M)           
  UPDATE                                   
  END TRANSACTION                        
END-FIND                                   
*                                          
END

プログラム SUBEX1S の出力:

ENTER A NAME: BROWN

名前を入力して確認した後:

NAME: BROWN
FIRST NAME: KENNETH
CITY: DERBY

レポーティングモードの例については、次のプログラムを参照してください:UPDEX1R