パラメータ使用上の注意事項

Operation Knowhow
パラメータ使用上の注意事項
初 版 2016/01/04
第2版 2016/05/02
1
Copyright 2016 CYFLEX
Operation Knowhow
CALLコマンドのパラメータ
CLP内のCALLコマンドでパラメータを使用する場合は
以下の注意事項があります。
●文字の定数の桁数
32バイト以下の定数と、33バイト以上の定数では異なり、注意事項があります。
●数字の桁数
15.5で定義された場合とそうでない場合で異なり、注意事項があります。
2
Copyright 2016 CYFLEX
Operation Knowhow
CLPのCALLコマンドでのパラメータ
パラメーターの受け渡しは次のように行われます。(IBM i V7.2のマニュアルより)
•32バイト以下の文字ストリング定数は、常に 32 バイトとして (右側にブランクが埋め込まれて)
渡されます。文字定数が 32 バイトより長い場合には、その長さの定数全体が渡されます。
パラメーターが 32 バイトより大きいものとして定義されている場合には、CALL コマンドは正確にその
バイト数分の定数を渡さなければなりません。 32 文字より長い定数については、受取側のプログラムで
予定されている長さに合わせるための埋め込みは行われません。
受取側のプログラムは、渡したバイト数より少ないバイト数しか受け取ることができません。
例えば、プログラムで受け取ることのできるのは 4 文字であると指定されていて、ABCDEF が渡され
た場合(26 文字のブランクが埋め込まれている)、 プログラムが受け入れて使用するのは ABCD だけです。
受取側のプログラムが、渡したバイト数より多いバイト数を受け取った場合、 その結果は予期できません。
文字として渡す数字は単一引用符で囲まなければなりません。
•10 進定数は、長さ LEN(15 5) のパック 10 進形式で渡されます。
15 は値全体の長さで、5 は小数部分の桁数です。したがって、12345 というパラメーターが渡されると
すれば、 受取側のプログラムでは 10 進数フィールドが LEN(15 5) として宣言されていなければならず、
そのパラメーターは 12345.00000 として受け取られます。
呼び出されるプログラムに数値定数を渡す必要があり、かつそのプログラムが「15 5」以外の長さと精度
でその値の受取が想定されている場合には、その定数を16 進数形式でコーディングすることができます。
3
Copyright 2016 CYFLEX
Operation Knowhow
文字ストリング定数の指定
コマンドラインから実行
CALL PGM1 (‘ABC’ ‘DEF’)
受取側
(PGM1)
結果
32桁を超えている
のでゴミが残る。
NG
※受取側がRPGの場合も同じ結果
4
Copyright 2016 CYFLEX
Operation Knowhow
文字ストリング定数の指定
CLPの中から実行
呼出側
定数を直接指定
受取側
(PGM1)
結果
NG
32桁を超えている
のでゴミが残る。
※受取側がRPGの場合も同じ結果
5
Copyright 2016 CYFLEX
Operation Knowhow
文字ストリング定数の指定
CALL ‘ABC’
32バイトまで
ABC△ーーーーーーーー△
残りの桁はスペースで埋められる。
CALL ‘ABC’
32バイト以上
ABC????????????????????????????????????????????
残りの桁は保障されない。
6
Copyright 2016 CYFLEX
Operation Knowhow
文字ストリング定数の指定
CLPの中から実行
呼出側
定数を変数で指定
受取側
(PGM1)
結果
OK
※受取側がRPGの場合も同じ結果
7
Copyright 2016 CYFLEX
Operation Knowhow
文字ストリング定数の指定
CLPの中からSBMJOBを実行
呼出側
定数を直接指定
受取側
(PGM1)
結果
NG
※受取側がRPGの場合も同じ結果
8
Copyright 2016 CYFLEX
Operation Knowhow
文字ストリング定数の指定
CLの中からSBMJOBを実行
呼出側
定数を変数で指定
受取側
(PGM1)
結果
NG
※受取側がRPGの場合も同じ結果
9
Copyright 2016 CYFLEX
Operation Knowhow
文字ストリング定数指定のまとめ
①SBMJOBの場合は定数を直接指定するしないに関わらず
32桁を超えてはいけない。
②CLP内でCALLする場合は変数を使用すれば32桁を超え
てもよい。
定数を直接指定する場合は32桁を超えてはいけない。
10
Copyright 2016 CYFLEX
Operation Knowhow
32桁より長い場合の対応方法
呼出側
実際の桁数より1桁多く取り最後
にダミーの文字を挿入する。
受取側
受け取った文字から最後の文字を
除去する。
11
Copyright 2016 CYFLEX
Operation Knowhow
10進定数のパラメータ指定
コマンドラインから実行
CALL PGM1 123
RPG,CLP共にパック形式の長さ15,5で定義しておけば
10進数形式で指定できます。
小数点使用の場合も12.3と指定できます。
受取側
(PGM1)
結果
OK
CLP
受取側
(PGM1)
結果
RPG
OK
12
Copyright 2016 CYFLEX
Operation Knowhow
10進定数のパラメータ指定
コマンドラインから実行
CALL PGM1 123
受取側(PGM1)
受取側(PGM1)
CLP
RPG
結果 NG
結果
13
NG
Copyright 2016 CYFLEX
Operation Knowhow
10進定数のパラメータ指定
コマンドラインから実行
CALL PGM1 X’00123F’
バイト数が一致してい
ること。
X’123F’はNG
SBMJOBの場合も同じ
受取側
(PGM1)
CLP
結果 OK
受取側
(PGM1)
必要バイト数の求め方
(入力桁数+1)÷2 小数点以下は
切り上げ
5桁→3バイト
X’12345F’
6桁→4バイト
X’0012345F’
RPG
注:パック形式になっていること。
結果 OK
14
Copyright 2016 CYFLEX
Operation Knowhow
10進定数のパラメータ指定
CLPの中から実行
CALL PGM1 123
結果
NG
CALL PGM1 X’00123F’
結果
OK
DCL VAR(&P1) TYPE(*DEC) LEN(5 0) VALUE(123)
CALL PGM1 &P1
結果
OK
DCL VAR(&P1) TYPE(*DEC) LEN(5 0) VALUE(123)
SBMJOB CMD(CALL PGM(PGM1) PARM(&P1))
結果
NG
SBMJOB CMD(CALL PGM(PGM1) PARM(X’00123F’))
結果 OK
15
Copyright 2016 CYFLEX
Operation Knowhow
10進数定数指定のまとめ
コマンドラインからCALLまたはSBMJOBを実行する場合
①10進数定数を指定する場合は、受取側ではパック形式の長さ15,5で
定義しておくこと。(CLP,RPG)
②15,5で定義しない場合は、呼出側では16進数形式で指定する。
受取側はパック形式で定義しておくこと。(ゾーン10進数はNG)
16進数指定の場合はバイト数が一致していること。
16
Copyright 2016 CYFLEX
Operation Knowhow
10進数定数指定のまとめ
CLPの中からCALLまたはSBMJOBを実行する場合
①10進数定数を指定する場合は、受取側ではパック形式の長さ15,5で
定義しておくこと。(CLP,RPG)
②15,5で定義しない場合は、呼出側では16進数形式で指定する。
受取側はパック形式で定義しておくこと。(ゾーン10進数はNG)
16進数指定の場合はバイト数が一致していること。(添付資料参照)
③変数で10進数データを渡す場合は受取側では15,5の長さである必要は
ありません。但し、パック形式になっている必要があります。
④SBMJOBでは10進数定数指定または変数指定はできない。
16進数で指定するか、受取側で15,5形式で定義する。
17
Copyright 2016 CYFLEX
Operation Knowhow
パック10進数について
1.ゾーン10進数
1桁はゾーン部(4bit)と数値部(4bit)で構成される。
EBCDICでは、ゾーン部は「F」で埋められる。
最後の桁は、ゾーン部はマイナス数値の場合は、
「D」になる。
ゾーン10進数
ゾーン部 数値部
10進数
例. -12345の場合
パック10進数
F 1 F 2 F 3 F 4 D 5
2.パック10進数
ゾーン部をなくして4bit単位で1桁を表す。
最後の下位4bitは、符号を表す。
例. -1234の場合
例. -12345の場合
1
2
3
4
0
5 D
1
2
3
4 D
4桁の数字の場合は、最初の4bitは、
0になる。偶数桁の場合は、必ずこの
ようになる。
5桁の数字は3バイトで済む。
18
Copyright 2016 CYFLEX
Operation Knowhow
パック10進数について
プログラム内部では、パック10進数に変換されて処理されるので、最初
からパック10進数にしておくとパフォーマンスはよい。
CLでの定義
DCL VAR(&DATE) TYPE(*DEC) LEN(6 0)
※CLでは、無条件に数字項目はパック10進数になる。
DDSでの定義
A
A
AQCSTM
AQCETM
6P 0
6P 0
COLHDG(‘ 当日開始 ’)
COLHDG(‘ 当日終了 ’)
ILE RPGでの定義
D COMMANDLEN
S
15P 5 INZ(80)
19
Copyright 2016 CYFLEX
Operation Knowhow
パック10進数について
Commands:
DSPPFM F10
WRKDBM(ToolBox)
ゾーン
10進数
パック
10進数
20
Copyright 2016 CYFLEX
Operation Knowhow
Schedulerの指定
AUTO/400 Ver3.2
文字定数
32桁まで
数字定数
15桁まで(小数点以下は不可)
Hybrid SCHEDULER Ver1.1
文字定数
999桁まで
数字定数
15桁まで(小数点以下は不可)
21
Copyright 2016 CYFLEX
Operation Knowhow
パラメータの制限
タイプ
制限値
個数
CLP
サイズ
個数
RPG
サイズ
個数
ILE RPG
NEW
サイズ
MAX40個 V5.3からはMAX255個
CHAR 9,999バイト
DEC
15桁(小数点以下MAX9桁)
MAX255個
CHAR 256バイト
DEC
30桁(小数点以下MAX9桁)
MAX255個 CALLB,PLISTの場合は399
CHAR 65,535バイト
DEC
30桁(小数点以下MAX30桁)
22
Copyright 2016 CYFLEX