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

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 で渡されたパラメータの他に、グローバルデータエリアにもアクセスできます。

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

Top of page

構文説明

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

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

構文要素の説明:

REPEAT
ユーザー操作の必要性の排除:

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

RETURN
プログラムタイプのオブジェクトのルーチンとして呼び出しおよび実行:

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

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

operand1
プログラム名:

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

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

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

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

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

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

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

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

parameter
日付変数の日付形式:

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

Top of page

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

** 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

Top of page