CL変数宣言 (DCL)

CL変数宣言(DCL)コマンドは,CLプログラムまたはILE CLプロシージャーで使用される制御言語(CL)プログラム変数を定義します。CL変数は,データを記憶して更新し,呼び出しでの別のプログラムからパラメーターを受け取るために使用されます。CL変数は,それを宣言するプログラム内だけで名前によって知られています。これはCLプログラムまたはILE CLプロシージャーの外側で使用することができませんが,プログラムのデバッグのために一部のコマンド(DSPPGMVARコマンドなど)によって参照される場合は例外です。ただし,変数中の値をパラメーターとして別のプログラムに渡すことはできます。変数が宣言されているが,CLプログラムまたはILE CLプロシージャーの別のコマンドによって参照されない場合には,その変数はコンパイルされる時にプログラムに組み込まれません。各DCLコマンドは1つのCL変数の属性を定義し,それが使用されるプログラム内にその名前を宣言します。

プログラムのCL変数は2つの宣言コマンドの1つによって識別されなければなりません。ファイル宣言(DCLF)コマンドは,表示装置ファイルおよびデータベース・ファイルのCL変数を宣言します。DCLコマンドはその他のすべてのCL変数を宣言します。

制約事項:このDCLコマンドはCLプログラムまたはILE CLプロシージャー内でのみ有効です。すべての宣言コマンド(DCL, COPYRIGHT, DCLF,およびDCLPRCOPT)は,PGM(プログラム)コマンドの後に続き,プログラム中の他のすべてのコマンドより前になければなりません。宣言コマンドの4つのタイプはどの順序でも混用することができます。

パラメーター

キーワード 記述 選択項目 ノーツ
VAR CL変数名 CL 変数名 必須, 定位置 1
TYPE タイプ *DEC, *CHAR, *LGL, *INT, *UINT, *PTR 必須, 定位置 2
STG 記憶域 *AUTO, *BASED, *DEFINED オプショナル
LEN 変数の長さ 要素リスト オプショナル, 定位置 3
要素 1: 長さ 整数
要素 2: 小数点以下の桁数 整数
VALUE 初期値 文字値 オプショナル, 定位置 4
BASPTR 基底ポインター変数 CL 変数名 オプショナル
DEFVAR 変数で定義 要素リスト オプショナル
要素 1: CL変数名 CL 変数名
要素 2: 位置 1-32767, 1
ADDRESS アドレス 単一値: *NULL
その他の値: 要素リスト
オプショナル
要素 1: CL変数名 CL 変数名
要素 2: オフセット 0-32766, 0

CL変数名 (VAR)

CLプログラムまたはILE CLプロシージャー内で宣言するCL変数を指定します。変数が存在するのは,それが宣言されたプログラム内だけです。これは呼び出しのパラメーターとして別のプログラムに渡すことができ,その場合,呼び出されるプログラムによってこれを処理することができます。この名前はアンパーサンド(&)で始まっていなければなりません。

これは必須パラメーターです。

タイプ (TYPE)

宣言するCL変数に含まれる値のタイプを指定します。このパラメーターの値はCL変数によって指定することができません。

これは必須パラメーターです。

*DEC
パック10進数値を含む10進変数。
*CHAR
文字ストリング値を含む文字変数。
*LGL
論理値'1'または'0'のいずれかを含む論理変数。
*INT
符号付き2進値を含む整変数。
*UINT
符号なし2進値を含む整変数。
*PTR
アドレスが入っているポインター変数。

記憶域 (STG)

変数の記憶域タイプを指定します。このパラメーターの値はCL変数によって指定することができません。

*AUTO
この変数の記憶域は,自動記憶域内で割り振られます。
*BASED
この変数の記憶域は,基底ポインター変数 (BASPTR)パラメーターに指定されたポインター変数に基づいています。基礎となるCL変数は,基底ポインター変数が有効なアドレスに設定されていない限り,使用することはできません。
*DEFINED
この変数の記憶域は,変数で定義(DEFVAR)パラメーターに指定されたCL変数によって提供されます。

変数の長さ (LEN)

宣言するCL変数の長さを指定します。変数が10進数値の場合には,小数点の右側の10進の桁数を任意に指定することができます。このLENパラメーターの値はCL変数によって指定することはできません。

注: TYPEパラメーターに*PTRが指定されている場合には,このパラメーターに値を指定できません。ポインターは,16バイトの固定長です。

要素1: 長さ

長さ
文字または整数のCL変数の場合,CL変数のバイト数を指定してください。10進CL変数の場合,CL変数の最大桁数を指定してください。この長さは,このタイプの変数の最大値より大きくすることはできません。長さは,整数CL変数の場合は2, 4,または8でなければなりません。ILE CLプロシージャーのみ,長さ8の整数CL変数を使用できます。

要素2: 小数点以下の桁数

小数点以下の桁数
この要素は10変数の場合にのみ有効です。変数の値の長さには,その値の小数点以下の桁数も含まれます。10進数値の最大長は15桁で,小数点の右側の桁数も含まれます。最大9桁の小数点以下の桁数を指定することができます。9桁の小数点以下の桁数を指定した場合には,15桁のうち6桁だけが整数値に残されているために,小数点のの値は999,999より大きくすることはできません。

10進数変数の長さ(桁数)が指定され,小数点以下の桁数が指定されない場合には,小数点以下の桁数は0と見なされます。

5つのタイプのそれぞれの最大長は次の通りです。

5つのタイプのそれぞれの省略時の長さは次の通りです。

注: 10進数および文字タイプでは,VALUEパラメーターに1が指定された場合には,省略時の長さは初期値の長さと同じです。

初期値 (VALUE)

初期値をプログラムで宣言する時に,CL変数に割り当てる初期値を指定します。この値は,TYPEパラメーターによって指定されたタイプでなければなりません。値を指定しない場合には,文字変数はブランクに設定され,10進変数,整変数,または符号なし整変数はゼロの値に設定され,さらに,論理変数は「0」に設定されます。VALUEパラメーターの値はCL変数によって設定することはできません。

*PTR CL変数または記憶域 (STG)パラメーターに指定された*DEFINEDまたは*BASEDによって宣言されたCL変数には,VALUEパラメーターを指定できない場合があります。

変数が宣言された同じプログラムのPGMコマンドのPARMパラメーターに,宣言された変数の名前を指定した場合には,その変数の初期値を指定することはできません。その場合には,変数は呼び出し側プログラムからその値を受け取ります。

基底ポインター変数 (BASPTR)

*BASEDの記憶域で宣言されたCL変数の基底ポインターを指定します。

注: 記憶域 (STG)パラメーターに*BASEDを指定した場合には,このパラメーターを指定しなければなりません。

CL変数名
宣言する基底付きCL変数の基底ポインターとして機能し,TYPE(*PTR)として宣言されたCL変数の名前を指定してください。基底付き変数を使用するには,このポインターをある値に初期設定する必要があります。

この名前はアンパーサンド(&)で始まっていなければなりません。

変数で定義(DEFVAR)

宣言する変数の定義の基礎となるCL変数を指定します。

注: 記憶域 (STG)パラメーターに*DEFINEDを指定した場合には,このパラメーターを指定しなければなりません。

注: STG(*DEFINED)として宣言された変数は,定義の基礎となるCL変数の最終バイトを超えて拡張することはできません。

要素1: CL変数名

CL変数名
宣言する変数の定義の基礎となるCL変数の名前を指定してください。

要素2: 開始桁

1
宣言する変数は,定義の基礎となる変数の先頭から始まります。
1から32767
定義の基礎となる変数の先頭から数えた宣言する変数の開始位置を指定してください。

アドレス (ADDRESS)

*PTRでTYPE値として宣言されたCL変数の初期アドレスを指定します。

注: 宣言する変数がポインター変数で,STGパラメーターに*AUTOを指定しない限り,このパラメーターに値を指定することはできません。

単一値

*NULL
ポインターはヌル値で初期化されます。

要素1: CL変数名

CL変数名
ポインター変数の初期アドレスとなるCL変数の名前を指定します。

この名前はアンパーサンド(&)で始まっていなければなりません。

要素2: オフセット

0
ポインター変数は,アドレス指定されるCL変数の先頭バイトに設定されます。
0から32766
アドレス指定され,ポインターが設定される変数の先頭からのバイト数を指定してください。

1: CL変数の長さの指定

DCL   &ABLE  *DEC  LEN(5 2)

このコマンドは,10進値を含む,&ABLEという名前のCL変数を宣言します。LENは最大5桁を指定し,そのうち2桁は小数点の右側にあるので,999.99より大きい値は不可能です。VALUEパラメーターが指定されておらず,値は数値なので,&ABLEの値はゼロ(000.00)に設定されます。

2:論理値の指定

DCL   &SWITCH   *LGL

このコマンドは,論理値を含む,&SWITCHという名前のCL変数を宣言します。タイプ・パラメーターが論理を指定しているので,変数は1文字の長さで,'0'に設定されます。

3: CL変数の初期値の指定

DCL   &FILNAM   *CHAR   VALUE(FILEA)

このコマンドは,値がFILEAである,&FILNAMという名前のCL変数を宣言します。値は5文字で,LENパラメーターが指定されていないので,変数の長さも5文字です。

4: 定義済みCL変数の指定

DCL   &QUALOBJ  *CHAR  LEN(20)
DCL   &OBJ  *CHAR  LEN(10)  STG(*DEFINED)  DEFVAR(&QUALOBJ 1)
DCL   &LIB  *CHAR  LEN(10)  STG(*DEFINED)  DEFVAR(&QUALOBJ 11)

最初のDCLコマンドは,プログラムの自動記憶域内の20桁の文字変数を宣言します。2番目のDCLコマンドは,&QUALOBJ変数の最初の10文字を参照する&OBJという名前の変数を宣言します。最後のDCLコマンドは,&QUALOBJ変数の最後の10文字を参照するために使用できる&LIBという名前の変数を宣言します。

5: ポインターCL変数の指定

DCL   &CHAR  *CHAR  LEN(10)
DCL   &PTR   *PTR   ADDRESS(&CHAR)

2番目のDCLコマンドは,プログラムの自動記憶域内の&CHAR変数を示すように初期設定されたポインター変数を宣言します。

6: 基礎となるCL変数の指定

DCL   &PTR   *PTR
DCL   &CHAR  *CHAR  LEN(10)  STG(*BASED)  BASPTR(&PTR)

2番目のDCLコマンドは,&PTR変数によってアドレス指定されたロケーションで見つかる文字変数を宣言します。&CHAR変数を使用するには,%ADDRESS組み込み関数を使用して&PTR変数を有効なアドレスに初期設定する必要があります。

7: 定義済みポインターCL変数の指定

DCL   &CHAR  *CHAR  LEN(48)
DCL   &PTR   *PTR  STG(*DEFINED)  DEFVAR(&CHAR 17)

2番目のDCLコマンドは,変数&CHARの17から32バイトのポインター変数を宣言します。

8:ヌル値に初期化されるポインターの宣言

DCL   &PAYREC   *PTR  STG(*AUTO)  ADDRESS(*NULL)

ポインター変数&PAYRECは,ヌルの初期アドレス値で宣言されます。

エラー・メッセージ

なし