RUN

RUN [REPEAT] operand1 [operand2 [(parameter)]] 40

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

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

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


関数

RUN ステートメントは、Natural システムファイルから Natural ソースプログラムを読み込んで実行するときに使用します。

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

構文説明

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

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

構文要素の説明:

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

RUN REPEAT は、複数の出力画面が(INPUT ステートメントによって)生成されるような場合でも、プログラムの実行が終了するまで、ユーザーに入力を促さないようにします。

この機能は、各画面でユーザーが応答せずにプログラムで複数画面の情報を表示するような場合に使用できます。

operand1
プログラム名:

operand1 として、プログラムの名前を英数字定数または英数字変数の内容として指定できます。変数を使用する場合は、長さは 8 文字長で指定する必要があります。

プログラムは、現在のライブラリまたは連結されたライブラリ(デフォルトの STEPLIB は SYSTEM)に保存できます。プログラムが見つからない場合、エラーメッセージが発行されます。

プログラムはソースプログラムワークエリア内に読み込まれ、エリア内にあるソースプログラムに置き換わります。

operand2
Parameters:

RUN ステートメントは、実行するプログラムに対してパラメータを渡すためにも使用できます。パラメータは任意のフォーマットで指定できます。パラメータは、対応する INPUT フィールドに適したフォーマットに変換されます。すべてのパラメータは、Natural スタックの最上位に配置されます。

パラメータは INPUT ステートメントで読み込まれます。最初の INPUT ステートメントが発行されると、INPUT ステートメントで指定されたフィールドに全パラメータが挿入されます。INPUT ステートメントには数字フォーマットで定義されたパラメータフィールドに対する符号指定(SG=ON)が必要です。

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

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

parameter
日付フォーマット:

operand2 が日付変数の場合は、この変数に対する parameter として、セッションパラメータ DF(『パラメータリファレンス』を参照)を指定できます。

ダイナミックなソーステキストの作成/実行

ソースまたはその一部をダイナミックに作成したプログラムは、RUN ステートメントでダイナミックにコンパイルおよび実行できます。

ダイナミックなソーステキスト作成を実行するには、グローバル変数にソーステキストを挿入し、その後、ソーステキストでそのグローバル変数を参照します。このとき、変数名の先頭文字のプラス記号(+)をアンパサンド(&)に置き換えて参照します。グローバル変数の内容は、プログラムが RUN ステートメントで呼び出されたときに、ソーステキストとして解釈されます。

インデックス付きグローバル変数を、RUN ステートメントを介して呼び出されるプログラム内で使用しないでください。

グローバル変数にコメントや INCLUDE ステートメントを入れることはできません。

RUN ステートメントを含むプログラム:

** Example 'RUNEX1': RUN (with dynamic source program creation)         
************************************************************************
DEFINE DATA                                                             
GLOBAL                                                                  
  USING RUNEXGDA                                                        
LOCAL                                                                   
1 #NAME (A20)                                                           
1 #CITY (A20)                                                           
END-DEFINE                                                              
*                                                                       
INPUT 'Please specify the search values:' //                            
      'Name:' #NAME /                                                   
      'City:' #CITY                                                     
*                                                                       
RESET +CRITERIA     /* defined in GDA 'RUNEXGDA'                        
*                                                                       
IF #NAME = ' ' AND #CITY = ' '                                          
  REINPUT 'Enter at least 1 value'                                      
END-IF                                                                  
*                                                                    
IF #NAME NE ' '                                                      
  COMPRESS 'NAME' ' =''' #NAME '''' INTO +CRITERIA LEAVING NO        
END-IF                                                               
IF #CITY NE ' '                                                      
  IF +CRITERIA NE ' '                                                
    COMPRESS +CRITERIA 'AND' INTO +CRITERIA                          
  END-IF                                                             
  COMPRESS +CRITERIA ' CITY =''' #CITY '''' INTO +CRITERIA LEAVING NO
END-IF                                                               
*                                                                    
RUN 'RUNEXFND'                                                       
*                                                                    
END

RUN ステートメントで実行されるプログラム RUNEXFND:

** Example 'RUNEXFND': RUN (program executed with RUN in RUNEX1)        
************************************************************************
DEFINE DATA                                                             
GLOBAL                                                                  
  USING RUNEXGDA
LOCAL                                                                   
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
  2 CITY                                                                
END-DEFINE                                                              
*                                                                       
* &CRITERIA filled with  "NAME = 'xxxxx' AND CITY = 'xxxx'"             
*                                                                       
FIND NUMBER EMPLOY-VIEW WITH &CRITERIA                                  
     RETAIN AS 'EMP-SET'                                            
DISPLAY *NUMBER                                                         
*                                                                       
END

グローバルデータエリア RUNEXGDA:

Global    RUNEXGDA  Library SYSEXSYN                      DBID    10 FNR    32
Command                                                                     > +
I T L  Name                             F Length     Miscellaneous             
All -- -------------------------------- - ---------- ------------------------->
     1 +CRITERIA                        A         80