バージョン 4.2.5
 —  ステートメント  —

STORE

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

STORE [RECORD] [IN] [FILE] view-name      
  [PASSWORD=operand1]      
  [CIPHER=operand2]      
 

USING

NUMBERoperand3

GIVING

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

STORE [RECORD] [IN] [FILE] view-name      
  [PASSWORD=operand1]      
  [CIPHER=operand2]      
 

USING

NUMBER operand3

  GIVING
 

[USING] SAME [RECORD] [AS] [STATEMENT [(r)]]

 

SET

[operand4=operand5]
  WITH

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

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

関連ステートメント: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 | UPDATE

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


機能

STORE ステートメントは、データベースにレコードを追加するために使用します。

Top of page

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

Adabas Natural システム変数 *ISN には、STORE ステートメントの実行の結果として新しいレコードに割り当てられた Adabas ISN が含まれます。 *ISN への後続の参照には、関連する STORE ステートメントのステートメント番号が含まれている必要があります。
DL/I

このステートメントは、セグメントオカレンスを追加するために使用できます。

データセットをプライマリキーで定義する場合は、プライマリキーフィールドに値を入力する必要があります。 GSAM データベースの場合、レコードはデータベースの最後に追加する必要があります(GSAM 制限のため)。

Natural システム変数 *ISN は使用できません。

SQL

このステートメントは、SQL テーブルに行を追加するために使用できます。 PASSWORD 節、CIPHER 節、および GIVING NUMBER 節は使用できません。 STORE ステートメントは、SQL の INSERT ステートメントに相当します。

Natural システム変数 *ISN は使用できません。

VSAM

データセットをプライマリキーで定義する場合は、プライマリキーフィールドに値を入力する必要があります。

Natural システム変数 *ISN には、STORE ステートメントの実行の結果として新しいレコードに割り当てられた VSAM RBA/RRN が含まれます。 *ISN への後続の参照には、関連する STORE ステートメントのステートメント番号が含まれている必要があります。

VSAM データベースの場合、Natural システム変数 *ISN は ESDS および RRDS ファイルに対してのみ使用できます。

Top of page

構文説明

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

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
operand1 C S       A                         不可
operand2 C S           N                     不可
operand3   S           N P     B *             不可
operand4   S A     A   N P I F B D T L       不可 不可
operand5 C S A     A   N P I F B D T L       不可

* operand3 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

view-name

view-name として、ビューの名前を指定します。この名前は、DEFINE DATA ステートメント内、あるいはプログラム外のグローバルデータエリアまたはローカルデータエリアに事前に定義しておく必要があります。

レポーティングモードでは、DEFINE DATA ステートメントを使用しない場合、view-name には DDM の名前も使用できます。

PASSWORD=operand1

PASSWORD 節は、Adabas または VSAM データベースに対してのみ適用可能です。

この節は、パスワード保護されたファイルのデータを更新するときのパスワード(operand1)の指定に使用します。 パスワード(operand1)は、英数字定数または英数字変数として指定できます。 最大 8 文字から成り、特殊文字または埋め込み空白は使用できません。 パスワードを定数として指定する場合は、一重引用符で囲む必要があります。

詳細については、FIND ステートメントおよび PASSW ステートメントを参照してください。

CIPHER=operand2

CIPHER 節は、Adabas または VSAM データベースに対してのみ適用可能です。

この節は、暗号化されたファイルのデータを更新するときのサイファキー(operand2)の指定に使用します。 サイファキー(operand2)は、数値定数(8 桁)またはユーザー定義変数(フォーマット/長さ N8)として指定できます。

詳細については、FIND ステートメントを参照してください。

USING NUMBER operand3

または

GIVING NUMBER operand3

この節は、Adabas または VSAM データベースでのみ使用できます。 VSAM データベースの場合、この節は VSAM RRDS に対してのみ有効です。この場合、ユーザー指定の RRN(相対レコード番号)は上記の ISN に対応します。

この節は、ユーザー指定の Adabas ISN を持つレコードを保存するために使用します。 指定した ISN を持つレコードがすでに存在しているときには、エラーメッセージが返され、ON ERROR 処理の指定がない場合、プログラムの実行は終了します。

SET/WITH operand4=operand5

SET/WITH は、レポーティングモードで値を与えるフィールドを指定するために使用します ファイルに定義されているフィールドで、SET 節で指定されないフィールドは、新しいレコード内で空値となります。

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

DL/I-Specific の考慮事項:

可変長のセグメントは、STORE ステートメントで指定されたすべてのフィールドを含めるのに必要な最小長で保存されます。 セグメント長は、DBD の SEGM マクロで指定された最小サイズより小さくなることはありません。 値は、セグメントシーケンスフィールドのほか、上位のすべてのシーケンスフィールドに対して指定する必要があります。 I/O(センシティブ)フィールドのみを指定できます。 マルチプルバリューフィールドまたはピリオディックグループが可変長として定義されている場合、セグメントの最後で、STORE ステートメントに指定されたオカレンスのみがセグメントに書き込まれ、それに応じてセグメント長が定義されます。

USING SAME (r)

USING SAME は、レポーティングモードで使用され、STORE ステートメントが参照するステートメント(FINDGETREAD)で読み込まれたフィールドと同じフィールドが新しいレコードとして追加されることを示します。 ステートメント参照表記 (r) は、ソースコード行番号またはステートメントラベルとして指定できます。

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

Top of page

** Example 'STOEX1S': STORE  (structured mode)                          
**                                                                      
** CAUTION: Executing this example will modify the database records!
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 FIRST-NAME                                                          
  2 MAR-STAT                                                            
  2 BIRTH                                                               
  2 CITY                                                                
  2 COUNTRY                                                             
*                                                                       
1 #PERSONNEL-ID (A8)                                                    
1 #NAME         (A20)                                                   
1 #FIRST-NAME   (A15)                                                   
1 #BIRTH-D      (D)                                                     
1 #MAR-STAT     (A1)                                                    
1 #BIRTH        (A8)                                            
1 #CITY         (A20)                                           
1 #COUNTRY      (A3)                                            
1 #CONF         (A1)                                            
END-DEFINE                                                      
*                                                               
REPEAT                                                          
  INPUT 'ENTER A PERSONNEL ID AND NAME (OR ''END'' TO END)' //  
        'PERSONNEL-ID : ' #PERSONNEL-ID  //                     
        'NAME         : ' #NAME          /                      
        'FIRST-NAME   : ' #FIRST-NAME                           
  /*                                                            
  /*  VALIDATE ENTERED DATA                                     
  /*                                                            
  IF #PERSONNEL-ID = 'END' OR #NAME = 'END'                     
    STOP                                                        
  END-IF                                                        
  IF #NAME = ' '                                                
    REINPUT WITH TEXT 'ENTER A LAST-NAME' MARK 2 AND SOUND ALARM
  END-IF                                                         
  IF #FIRST-NAME = ' '                                           
    REINPUT WITH TEXT 'ENTER A FIRST-NAME' MARK 3 AND SOUND ALARM
  END-IF                                                         
  /*                                                             
  /*  ENSURE PERSON IS NOT ALREADY ON FILE                       
  /*                                                             
  FIND NUMBER EMPL-VIEW WITH PERSONNEL-ID =  #PERSONNEL-ID       
  IF *NUMBER > 0                                                 
    REINPUT 'PERSON WITH SAME PERSONNEL-ID ALREADY EXISTS'       
             MARK 1 AND SOUND ALARM                              
  END-IF                                                         
  MOVE 'N' TO #CONF                                              
  /*                                                             
  /*  GET FURTHER INFORMATION                                    
  /*                                                             
  INPUT                                                          
    'ADDITIONAL PERSONNEL DATA'                        ////      
    'PERSONNEL-ID             :' #PERSONNEL-ID (AD=IO) /         
    'NAME                     :' #NAME         (AD=IO) /       
    'FIRST-NAME               :' #FIRST-NAME   (AD=IO) ///     
    'MARITAL STATUS           :' #MAR-STAT             /       
    'DATE OF BIRTH (YYYYMMDD) :' #BIRTH                /       
    'CITY                     :' #CITY                 /       
    'COUNTRY (3 CHARACTERS)   :' #COUNTRY              //      
    'ADD THIS RECORD (Y/N)    :' #CONF          (AD=M)         
  /*                                                           
  /*   ENSURE REQUIRED FIELDS CONTAIN VALID DATA               
  /*                                                           
  IF NOT (#MAR-STAT = 'S'  OR = 'M' OR = 'D' OR = 'W')         
    REINPUT TEXT 'ENTER VALID MARITAL STATUS  S=SINGLE ' -     
                 'M=MARRIED D=DIVORCED W=WIDOWED' MARK 1       
  END-IF                                                       
  IF NOT (#BIRTH = MASK(YYYYMMDD) AND #BIRTH = MASK(1582-2699))
    REINPUT TEXT 'ENTER CORRECT DATE' MARK 2                   
  END-IF                                                       
  IF #CITY  = ' '                                              
    REINPUT TEXT 'ENTER A CITY NAME' MARK 3                    
  END-IF                                         
  IF #COUNTRY = ' '                              
    REINPUT TEXT 'ENTER A COUNTRY CODE' MARK 4   
  END-IF                                         
  IF NOT (#CONF = 'N' OR= 'Y')                   
    REINPUT TEXT 'ENTER Y (YES) OR N (NO)' MARK 5
  END-IF                                         
  IF #CONF = 'N'                                 
    ESCAPE TOP                                   
  END-IF                                         
  /*                                             
  /*  ADD THE RECORD                             
  /*                                             
  MOVE EDITED #BIRTH TO #BIRTH-D (EM=YYYYMMDD)   
  /*                                             
  EMPL-VIEW.PERSONNEL-ID := #PERSONNEL-ID        
  EMPL-VIEW.NAME         := #NAME                
  EMPL-VIEW.FIRST-NAME   := #FIRST-NAME          
  EMPL-VIEW.MAR-STAT     := #MAR-STAT            
  EMPL-VIEW.BIRTH        := #BIRTH-D   
  EMPL-VIEW.CITY         := #CITY      
  EMPL-VIEW.COUNTRY      := #COUNTRY   
  /*                                   
  STORE RECORD IN EMPL-VIEW        
  /*                                   
  END OF TRANSACTION                   
  /*                                   
  WRITE NOTITLE 'RECORD HAS BEEN ADDED'
  /*                                   
END-REPEAT                             
END                                   

プログラム STOEX1S の出力:

ENTER A PERSONNEL ID AND NAME (OR 'END' TO END)
                                               
PERSONNEL-ID : 90001100           
                                               
NAME         : JONES                        
FIRST-NAME   : EDWARD

人事キーデータを入力および確定した後、追加の人事データフィールドが入力用に表示されます。

ADDITIONAL PERSONNEL DATA             
                                      
                                      
                                      
PERSONNEL-ID             : 90001100   
NAME                     : JONES      
FIRST-NAME               : EDWARD     
                                      
                                      
MARITAL STATUS           :            
DATE OF BIRTH (YYYYMMDD) :            
CITY                     :            
COUNTRY (3 CHARACTERS)   :            
                                      
ADD THIS RECORD (Y/N)    : N         

レポーティングモードの例はライブラリ SYSEXRM のプログラム STOEX1R を参照してください。

Top of page