メニューボタン
IBMi海外記事2015.05.27

静的SQL照会の動的リスト

Ted Holt 著

こんにちは、Ted:

1 つから 13 個の 2 バイト・コードを受け入れることができ、行選択で IN 節の一部となる SQL 照会があります。あらかじめ、どのコードを見る必要があるかわかりません。対話式といったものです。動的 SQL を使用しています。静的なソリューションを探しているのですが、何か提案していただけますか?

--Harold

もちろんです、Harold。こういったことは時々、静的 SQL を使ってやります。

仮にそれらの 2 バイト・コードが、米国で使っている状態省略形のような状態省略形だとします。おそらく、ユーザーがコードを入力するフォームや表示がありますが、例としてコマンド・インターフェースを使おうと思います。

以下のような、最大 12 の状態省略形を入力できる AR102 コマンドがあります。

技術情報010

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

技術情報011

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

技術情報012

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

以下のようなコマンドを実行します。

技術情報013

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

技術情報014

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

技術情報015

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

技術情報016

AR102R は、 QIWS ライブラリーにあるファイル QCUSTCDT を読み取り、指示された状態から行を選択します。これがうまくいきます。何も問題ありません。

しかし、もしあなたが、私のように静的 SQL が好みなら、IN 節を動的に構築することはできません。私が上手くいく技法があります。

まず、コードをロードする一時表を作成します。1 行に 1 コードです。次に、IN 節の表を参照します。変更したプログラムは以下のようになります。

技術情報017

BuildListOfStates サブプロシージャーと BuildCursor サブプロシージャーがどのように変化したかに注目してください。BuildListOfStates は一時表 LIST を QTEMP に作成し、その中に各コードを書き込みます。BuildCursor は IN 節の LIST を参照しています。

完全にするために、以下のようなプリンター・ファイル定義があります。

技術情報018

あわせて読みたい記事

PAGE TOP