こんにちは、上村です。
前回の更新から、だいぶ日を空けてしまいました。
季節はもう夏ですね^_^;
まだまだ未熟者ですが、今回は初めて”技術情報”カテゴリの投稿をします。
SQLを使用したILE-RPGをコンパイルしようとしたところ、以下のようなエラーが発生しました。
<状況>
ソースを確認したところ、確かに/copyで定義したメンバーの中に、さらに/copyが定義してありました。
<原因>
SQLを使用するILE-RPGをコンパイルするとき、先に「SQLプリコンパイラー」が実行され、次に「RPGコンパイルラー」が実行されます。
RPGコンパイラーはすべて(ネストも含む)の/copyを展開することができますが、先に実行されるSQLプリコンパイラーはネストされた/copyを展開することできないためエラーが発生します。
<解決策>
方法1)「/copy」を「/include」に置き換える。
⇒/includeで定義されたメンバーは、SQLプリコンパイラーの処理対象外のため無視されます。
そのため、次に実行されるRPGコンパイラーによって展開され、問題なくコンパイルされます。
(※今回は、方法1の解決策を採用しました。)
方法2)コンパイル時に「RPGプリプロセッサー・オプション」のパラメータ値を変更する。
⇒パラメータ値が*NONE以外の場合、SQLプリコンパイラーを実行する前に、RPGプリプロセッサーが先に呼び出されます。
呼び出されたRPGプリプロセッサーは、パラメータで指定された値によって、条件付きのコンパイルを行います。
・*LVL1:ネストされた/copyを含むすべての/copyを先に展開してくれる。
・*LVL2:すべての/copyと/includeを先に展開してくれる。
今回、解決方法をまずインターネットで検索しましたが、「日本語の情報が少ない」ということを改めて感じました。
(1)英語の情報も含めて、膨大な情報の中から「使える情報」を探し出すこと
(2)その上で、自分でやってみること
(3)やってみた結果を自分なりに分析すること
がとても重要なスキルですね…。
言葉でいうのは簡単で、よく分からないことを試行錯誤し続けることは、とても根気が必要な作業です。
そう簡単に身に付くものではありませんが、繰り返すことでスキルを磨いていきたいです。勉強になりました。