静的SQL照会の動的リスト
こんにちは、Ted:
1 つから 13 個の 2 バイト・コードを受け入れることができ、行選択で IN 節の一部となる SQL 照会があります。あらかじめ、どのコードを見る必要があるかわかりません。対話式といったものです。動的 SQL を使用しています。静的なソリューションを探しているのですが、何か提案していただけますか?
--Harold
もちろんです、Harold。こういったことは時々、静的 SQL を使ってやります。
仮にそれらの 2 バイト・コードが、米国で使っている状態省略形のような状態省略形だとします。おそらく、ユーザーがコードを入力するフォームや表示がありますが、例としてコマンド・インターフェースを使おうと思います。
以下のような、最大 12 の状態省略形を入力できる AR102 コマンドがあります。

以下のようなコマンドを使用してクエリーを実行することができます。

このコマンドは RPG プログラム AR102R を実行します。AR102R は、あなたが使っている動的アプローチを使います。

コマンドは、コードのリストを文字列として RPG プログラムに送信します。最初の 2 バイトは符号付き整数で、リストにいくつの値があるかを示します。状態省略形が続きます。BuildListOfStates サブプロシージャーは、リストを IN 節の形式に変換します。
以下のようなコマンドを実行します。

RPG プログラムが以下を受信します。

2 つのアスタリスクはまやかしです。実際そこにあるのは整数 3 (16 進数の 0003) であり、正確にテキストで表現することはできません。RPG プログラムは以下を生成します。

SQL コマンド全体は以下のようになります。

AR102R は、 QIWS ライブラリーにあるファイル QCUSTCDT を読み取り、指示された状態から行を選択します。これがうまくいきます。何も問題ありません。
しかし、もしあなたが、私のように静的 SQL が好みなら、IN 節を動的に構築することはできません。私が上手くいく技法があります。
まず、コードをロードする一時表を作成します。1 行に 1 コードです。次に、IN 節の表を参照します。変更したプログラムは以下のようになります。

BuildListOfStates サブプロシージャーと BuildCursor サブプロシージャーがどのように変化したかに注目してください。BuildListOfStates は一時表 LIST を QTEMP に作成し、その中に各コードを書き込みます。BuildCursor は IN 節の LIST を参照しています。
完全にするために、以下のようなプリンター・ファイル定義があります。
