ローコード開発プラットフォームとして提供されているOracle Apex(Oracle Application Express)。
使い慣れると、とても便利なツールです。
この記事では、APEXを使ってテーブルのある項目の値を複数選択して表示する機能について、実装方法を解説します。
イメージとしては、SQLのWHERE句に『where xxx項目 in ('AAA','BBB')』と条件指定するケースです。
これをAPEXで実装する方法を解説します。
説明を飛ばすのであれば、こちらのリンクから対応方法に移動して下さい。
◆テーブルサンプル
今回のサンプルで、APEXが参照するテーブルとそのデータは以下の構成です。
[テーブル]
[使用したAEPXのバージョン]
Oracle APEX 22.1.2
(これより以前のバージョンでも同じ方法で対応できました。)
◆APEX-デザイナ画面とWeb画面
APEXにおいて、複数項目を選択できるようにするには、デザイナ画面で次のアイテムのいずれかを実装します。
○ チェック・ボックス・グループ
○ リスト・マネージャ
それぞれの設定で作成されるWeb画面は以下のようになります。
○ チェック・ボックス・グループ
○ リスト・マネージャ
どのデザインにするかは、作成時に検討してください。
以降は、デザインによる設定差異はないため、「チェック・ボックス・グループ」のデザインで記載します。
◆APEX-デザイナ画面で設定するSQL
前述でデザイナ画面に設定したアイテムを、データ表示に使用できるようにしていきます。
ここでは、「対話モード・レポート」形式で、テーブルの値を表示する方法で考えていきます。
「対話モード・レポート」で値を表示するには、[ソース]の部分でテーブル名を指定することで実装出来ます。
>デザイナ画面
デザイナ画面で設定することで、Web画面で表示される結果は、以下のようになります。
>Web画面
それでは、「チェック・ボックス・グループ」を設定したアイテムを検索で使用するように設定していきます。
設定は、デザイナ画面の[ソース]の部分の、「WHERE句」に検索条件を記載することで、アイテムを参照した検索を実装出来ます。
試しに、通常のSQLを記述するように記述してみます。
>デザイナ画面
(:P4_LISTは、このサンプル画面作成でチェック・ボックス・グループを設定したアイテムの名称です)
>Web画面
→初期表示の画面では、すべてのメンバにチェックが入っていないため、何も表示されません。
では、検索対象をチェックしていきます。
→1項目だけチェックを入れて検索すると、チェックを入れたデータだけ表示されます。
次に、複数メンバを検索対象にしてみます。
→何も表示されません。失敗です。
1つのメンバだけを対象にすると表示されますが、複数のメンバをチェックすると表示されない動作になりました。
原因を探るため、WHERE句で指定しているアイテムの結果を表示させてみます。
[デザイナ画面で設定]
→アイテム[P4_NEW]を追加
→[ソース設定]で、チェック・ボックス・グループを設定したアイテムの[P4_LIST]を参照する設定をする
アイテムを表示すると分かりますが、選択した値が[:]で繋がっています。
SQL文でinを使用する場合[,]で区切ります。区切りが異なるため1つの値としてSQLが動いているようです。
◆対応方法
このように[:]で繋がったアイテムをSQLで記載する方法として容易な方法は、
「WHERE句でinstr関数を使用する」方法です。
SQLの実装としては、
instr(':'||:P4_LIST||':',':'||ARIANM||':') > 0
となります。
構文としては
instr(':'||アイテム名||':',':'||検索列名||':') > 0
です。
検索結果は、下記のようになります。
→1つ選択でも表示されます。
◆最後に
細かいことを言えば、「チェック・ボックス・グループ」の設定方法なども記載したいですが、
今回は、『WHERE 項目名 in 値 の実装』に焦点を絞って記載することにし、省略させて頂きました。
機会があれば、別途記載しようかと思います。
尚、表示される値に対して検索するのであれば、デフォルトで表示される検索フィールドを利用する方法が最も手軽です。諸事象で検索フィールドを使用しない場合に参考にして下さい。