3

これが私の状況です: 私は次のようなプログラム A を持っています:

Fmfile IF EK DISK USROPN
d grue s like(dhseqn)
d
C *ENTRY PLIST
C PARM グルー
c mfileを開く
c***グルーで何かをする
c mfile を閉じる
c eval *inlr = *on

dhseqn は 2,0 S フィールドです。

コンパイルリストは私にこれを示しています:

*RNF7031 DHSEQN P(2,0) 000200 1000002D
          GRUE P(2,0) 000200D 000500M 000700 000800M
                            ベース(_QRNL_PRM+)

そして、2,0 S として宣言されたパラメーターを使用してプログラム A を呼び出すと、10 進数データ エラーが発生します。

これは予想どおりですか、それともコンパイラのバグですか?

4

2 に答える 2

5

RPG コンパイラーは (ILE の前であっても) データベース・フィールドをパック・フィールドに変換します。たとえば、ゾーン化されたファイル フィールドをデータ構造で使用すると、ゾーン化されたままになりますが、そうでない同じファイルのすべてのゾーン化されたフィールドはパックされます。

ファイル フィールドからの Like が本当に必要な場合は、ダミーのデータ構造を定義してゾーン化します。

さらに良いことに、エントリ パラメーターが変更されていない場合は、プログラムのプロトタイプで Const キーワードを使用して定義すると、型は自動的に変換され、式や定数も受け入れられます。

これは、プロシージャ プロトタイプと自動変換での Constの使用に関する非常に優れた記事です。

于 2010-06-11T20:31:24.530 に答える
0

grue の定義の「s」はデータ型を参照するのではなく、「スタンドアロン」フィールドとして定義します。grue のデータ型は LIKE(dhseqn) として指定され、コンパイル リストでは P(2,0) と表示されます。

于 2010-07-01T13:06:55.523 に答える