アプリケーション定義のグローバリゼーションに文字の値の比較と文字の値の比較動作という設定があります。
APEXのテンプレート処理自体がSQLおよびPL/SQLで記述されているため、セッション・パラメータのNLS_SORTやNLS_COMPを変更すると正常に動作しなくなります。そのため、これらのセッション・パラメータは、レポートなどのデータ・ソースとなるSELECT文の実行時に限定する必要があります。
簡単なアプリケーションを作成して、これらの設定の効果を確認してみます。
以下のクイックSQLのモデルを使って表COLL_TESTDATAを作成します。
# prefix: coll
testdata
name vc80
SQLワークショップのユーティリティのクイックSQLを開き、モデルから表を作成します。
上記のモデルを記述し、SQLの生成、SQLスクリプトを保存、レビューおよび実行をクリックします。
レビューおよび実行をクリックすると、スクリプト・エディタが開きます。以下のテストデータを入力するINSERT文を、CREATE TABLE文の下に挿入します。
insert into coll_testdata(name) values('太郎');
insert into coll_testdata(name) values('たろう');
insert into coll_testdata(name) values('タロウ');
insert into coll_testdata(name) values('Taro');
insert into coll_testdata(name) values('taro');
insert into coll_testdata(name) values('花子');
insert into coll_testdata(name) values('はなこ');
insert into coll_testdata(name) values('ハナコ');
insert into coll_testdata(name) values('Hanako');
insert into coll_testdata(name) values('hanako');
commit;
実行をクリックします。
確認画面が開きます。即時実行をクリックします。
表COLL_TESTDATAが作成され、10行のテストデータが挿入されます。
アプリケーションの作成をクリックします。確認画面が開くので、そこでもアプリケーションの作成をクリックします。
アプリケーション作成ウィザードが開きます。
デフォルトで表COLL_TESTDATAのフォーム付き対話モード・レポートが作成されます。
名前に言語照合の確認と入力し、アプリケーションの作成をクリックします。
アプリケーションを実行し、対話モード・レポートのページを表示します。Nameの昇順で行を並べます。
NLS_SORT、NLS_COMPのデフォルトは通常BINARYです。
フィルタで列としてName、演算子として次と類似(LIKE演算子)、式としてhanakoを指定します。
対話モード・レポートでの表示順序がHanako, hanako, taro, TaroとCase Insensitiveに変わっています。
列Nameをhanakoでフィルタすると、hanakoの行だけが表示されます。
同じフィルタ条件で、hanakoとHanakoの両方が表示されるようになります。
以上で文字の値の比較(NLS_SORT)と文字の値の比較動作(NLS_COMP)の設定の効果が確認できました。
文字の値の比較にJAPANESEを設定してみます。
辞書順にソートされます。
文字の値の比較にJAPANESE_Mを設定してみます。
文字の値の比較にUCA0700_JAPANESEを設定してみます。
表の列に言語照合を設定する方法については、こちらの記事で紹介しています。
アプリケーション定義による設定は、レポートのデータ・ソースなどに限定されているとはいえ、アプリケーション全体に影響があります。そのため、かなり小さなアプリケーションでないと使用は難しいように思います。
今回作成したアプリケーションのエクスポートを以下に置きました。表COLL_TESTDATAの作成やテスト・データをインストールするスクリプトも含んでいます。
https://github.com/ujnak/apexapps/blob/master/exports/nls-sort-and-nls-comp-sample.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完