FETCH

FETCH

REPEAT
RETURN

operand1 [operand2 [(parameter)]]

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

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

関連ステートメント:CALL | CALL FILE | CALL LOOP | CALLNAT | DEFINE SUBROUTINE | ESCAPE | FETCH | PERFORM

関連機能グループ:プログラムおよびルーチンの呼び出し


関数

FETCH ステートメントは、メインプログラムとして書かれた Natural オブジェクトプログラムを実行します。ロードするプログラムは、あらかじめ、Natural システムファイルにCATALOG または STOW コマンドで(カタログ化または格納して)保存しておく必要があります。FETCH ステートメントの実行によって、Natural ソースワークエリア内にあるソースプログラムが置き換えられることはありません。

Natural RPC の場合:『Natural リモートプロシージャコール(RPC)』ドキュメントの「サーバーに対する Natural ステートメントの注意事項」を参照してください。

その他の考慮事項

フェッチされたプログラムは、FETCH で渡されたパラメータの他に、グローバルデータエリアにもアクセスできます。

FETCH ステートメントは、Natural 管理者が設定した Natural プロファイルパラメータ OPRB に基づいて、内部的に END TRANSACTION ステートメントを実行する場合があります。そのため、1 論理トランザクションが複数の Natural プログラムにおよぶ場合は、OPRB パラメータが正しく設定されているかどうかを確認する必要があります。

構文説明

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

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

構文要素の説明:

構文要素 説明
REPEAT
REPEAT オプション:

REPEAT オプション節は、FETCH されたプログラムの実行中に発行される各 INPUT ステートメントに対して、ユーザーの入力待ちを省略します。これにより、ユーザーが ENTER キーを押すことなく、プログラムの実行についての情報を端末に送ることができます。

RETURN
RETURN オプション:

RETURN 指定がないと、FETCH ステートメントを発行したプログラムの実行を終了し、フェッチされたプログラムが"メインプログラム"(レベル 1)として処理されます。

FETCH RETURN でプログラムが呼び出された場合、呼び出したプログラムの実行は中断され(終了はしない)、FETCH 先のプログラムは"次のレベルのプログラム"として処理が始まります。RETURN を指定すると、FETCH を発行したそして、FETCH 先のプログラムで END ステートメントや ESCAPE ROUTINE ステートメントが現れると、呼び出したプログラムに制御が戻されます。処理は FETCH RETURN ステートメントの後のステートメントに渡ります。

operand1
プログラム名:

プログラムモジュール名(最大 8 文字)は、英数字定数で指定するか、英数字フォーマットのユーザー定義変数(長さ 1~8)の内容として指定します。

Natural は、FETCH ステートメントが発行されたときに稼働しているライブラリ内でプログラムを検索します。プログラムが見つからないとき、Natural は STEPLIB を検索します。それでも見つからないときには、エラーメッセージを発行します。

プログラム名にアンパサンド(&)を含むこともできます。実行時にこの文字は、システム変数 *LANGUAGE の現在の値に対応する 1 文字コードで置き換えられます。これにより、入力時の言語に応じて入力処理ごとに異なるプログラムを呼び出すことができるようになります。

operand2
パラメータフィールドの引き渡し:

FETCH ステートメントで呼び出されるプログラムに、パラメータフィールドを渡すこともできます。パラメータフィールドはどのフォーマットでも定義できます。パラメータは、対応する INPUT フィールドに適したフォーマットに変換されます。すべてのパラメータは、Natural スタックの最上位に配置されます。

FETCH 先のプログラムは、INPUT ステートメントでパラメータフィールドを読み込みます。最初の INPUT ステートメントにより、INPUT ステートメントで指定されたフィールドにすべてのパラメータフィールド値が挿入されます。数字フォーマットで定義されたパラメータフィールドに対しては、INPUT ステートメント側で SG=ON の指定が必要です。それは FETCH ステートメントで数字フォーマットで定義された各パラメータフィールドは、値が負の場合は符号桁を持つからです。

次の INPUT ステートメントで読み取られる以上のパラメータが渡されると、余分のパラメータは無視されます。パラメータの個数は、Natural システム変数 *DATA で取得できます。

注意:
operand2 が時刻変数(フォーマット T)の場合は、変数内容のうち時刻コンポーネントのみが渡され、日付コンポーネントは渡されません。

parameter
日付フォーマット:

operand2 が日付変数の場合は、この変数に対する parameter として、セッションパラメータ DF(日付フォーマット)を指定できます。

呼び出し元のプログラム:

** Example 'FETEX1': FETCH  (with parameter)                            
************************************************************************
DEFINE DATA LOCAL                                                       
1 #PNUM (N8)                                                            
1 #FNC  (A1)                                                            
END-DEFINE                                                              
*                                                                       
INPUT 10X 'SELECTION MENU FOR EMPLOYEES SYSTEM' /                       
      10X '-' (35) //                                                   
      10X 'ADD      (A)' /                                              
      10X 'UPDATE   (U)' /                                              
      10X 'DELETE   (D)' /                                              
      10X 'STOP     (.)' //                                             
      10X 'PLEASE ENTER FUNCTION: ' #FNC ///                            
      10X 'PERSONNEL NUMBER:' #PNUM                                     
*                                                                       
DECIDE ON EVERY VALUE OF #FNC                                           
  VALUE 'A', 'U', 'D'                                                   
    IF #PNUM = 0                                                        
      REINPUT 'PLEASE ENTER A VALID NUMBER' MARK *#PNUM
    END-IF                                             
  VALUE 'A'                                            
    FETCH 'FETEXAD' #PNUM                              
  VALUE 'U'                                            
    FETCH 'FETEXUP' #PNUM                              
  VALUE 'D'                                            
    FETCH 'FETEXDE' #PNUM                              
  VALUE '.'                                            
    STOP                                               
  NONE                                                 
    REINPUT 'PLEASE ENTER A VALID FUNCTION' MARK *#FNC 
END-DECIDE                                             
*                                                      
END

呼び出し先のプログラム FETEXAD:

** Example 'FETEXAD': FETCH (called by FETEX1)                          
************************************************************************
DEFINE DATA LOCAL                                                       
1 #PERS-NR (N8)                                                         
END-DEFINE                                                              
*                                                                       
INPUT #PERS-NR                                                          
*                                                                       
WRITE *PROGRAM 'Record added with personnel number:' #PERS-NR           
*                                                                       
END

呼び出し先のプログラム FETEXUP:

** Example 'FETEXUP': FETCH (called by FETEX1)                          
************************************************************************
DEFINE DATA LOCAL                                                       
1 #PERS-NR (N8)                                                         
END-DEFINE                                                              
*                                                                       
INPUT #PERS-NR                                                          
*                                                                       
WRITE *PROGRAM 'Record updated with personnel number:' #PERS-NR         
*                                                                       
END

呼び出し先のプログラム FETEXDE:

** Example 'FETEXDE': FETCH (called by FETEX1)                          
************************************************************************
DEFINE DATA LOCAL                                                       
1 #PERS-NR (N8)                                                         
END-DEFINE                                                              
*                                                                       
INPUT #PERS-NR                                                          
*                                                                       
WRITE *PROGRAM 'Record deleted with personnel number:' #PERS-NR         
*                                                                       
END

プログラム FETEX1 の出力:

SELECTION MENU FOR EMPLOYEES SYSTEM
-----------------------------------
                                   
ADD      (A)                       
UPDATE   (U)                       
DELETE   (D)                       
STOP     (.)                       
                                   
PLEASE ENTER FUNCTION: D            
                                   
                                   
PERSONNEL NUMBER: 1150304

機能と社員番号を入力した後:

Page      1                                                  05-01-13  11:58:46
                                                                               
FETEXDE  Record deleted with personnel number:   1150304