1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle APEXで複数の値を指定して検索する方法(WHERE 項目名 in 値 の実装方法)

Last updated at Posted at 2022-08-30

ローコード開発プラットフォームとして提供されているOracle Apex(Oracle Application Express)。
使い慣れると、とても便利なツールです。

この記事では、APEXを使ってテーブルのある項目の値を複数選択して表示する機能について、実装方法を解説します。
イメージとしては、SQLのWHERE句に『where xxx項目 in ('AAA','BBB')』と条件指定するケースです。
これをAPEXで実装する方法を解説します。

説明を飛ばすのであれば、こちらのリンクから対応方法に移動して下さい。

◆テーブルサンプル

今回のサンプルで、APEXが参照するテーブルとそのデータは以下の構成です。
[テーブル]
image.png

[データ]
image.png

[使用したAEPXのバージョン]
Oracle APEX 22.1.2
(これより以前のバージョンでも同じ方法で対応できました。)

◆APEX-デザイナ画面とWeb画面

APEXにおいて、複数項目を選択できるようにするには、デザイナ画面で次のアイテムのいずれかを実装します。

○ チェック・ボックス・グループ
○ リスト・マネージャ

それぞれの設定で作成されるWeb画面は以下のようになります。

○ チェック・ボックス・グループ

image.png

○ リスト・マネージャ

image.png

どのデザインにするかは、作成時に検討してください。
以降は、デザインによる設定差異はないため、「チェック・ボックス・グループ」のデザインで記載します。

◆APEX-デザイナ画面で設定するSQL

前述でデザイナ画面に設定したアイテムを、データ表示に使用できるようにしていきます。
ここでは、「対話モード・レポート」形式で、テーブルの値を表示する方法で考えていきます。

「対話モード・レポート」で値を表示するには、[ソース]の部分でテーブル名を指定することで実装出来ます。
>デザイナ画面
image.png

デザイナ画面で設定することで、Web画面で表示される結果は、以下のようになります。
>Web画面
image.png

それでは、「チェック・ボックス・グループ」を設定したアイテムを検索で使用するように設定していきます。
設定は、デザイナ画面の[ソース]の部分の、「WHERE句」に検索条件を記載することで、アイテムを参照した検索を実装出来ます。
試しに、通常のSQLを記述するように記述してみます。
>デザイナ画面
image.png
(:P4_LISTは、このサンプル画面作成でチェック・ボックス・グループを設定したアイテムの名称です)

>Web画面
image.png
→初期表示の画面では、すべてのメンバにチェックが入っていないため、何も表示されません。

では、検索対象をチェックしていきます。
image.png
→1項目だけチェックを入れて検索すると、チェックを入れたデータだけ表示されます。

次に、複数メンバを検索対象にしてみます。
image.png
→何も表示されません。失敗です。

1つのメンバだけを対象にすると表示されますが、複数のメンバをチェックすると表示されない動作になりました。

原因を探るため、WHERE句で指定しているアイテムの結果を表示させてみます。
[デザイナ画面で設定]
image.png
→アイテム[P4_NEW]を追加

image.png
→[ソース設定]で、チェック・ボックス・グループを設定したアイテムの[P4_LIST]を参照する設定をする


検索結果画面
image.png

アイテムを表示すると分かりますが、選択した値が[:]で繋がっています。

SQL文でinを使用する場合[,]で区切ります。区切りが異なるため1つの値としてSQLが動いているようです。

◆対応方法

このように[:]で繋がったアイテムをSQLで記載する方法として容易な方法は、
「WHERE句でinstr関数を使用する」方法です。

SQLの実装としては、
instr(':'||:P4_LIST||':',':'||ARIANM||':') > 0
となります。
image.png

構文としては
instr(':'||アイテム名||':',':'||検索列名||':') > 0
です。

検索結果は、下記のようになります。
image.png
→1つ選択でも表示されます。

image.png
→複数選択でも表示されます。

◆最後に

細かいことを言えば、「チェック・ボックス・グループ」の設定方法なども記載したいですが、
今回は、『WHERE 項目名 in 値 の実装』に焦点を絞って記載することにし、省略させて頂きました。
機会があれば、別途記載しようかと思います。

尚、表示される値に対して検索するのであれば、デフォルトで表示される検索フィールドを利用する方法が最も手軽です。諸事象で検索フィールドを使用しない場合に参考にして下さい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?