Oracle APEX 23.1より、RESTデータ・ソースのデータ・プロファイルの詳細にRAWセレクタの使用というオプションが追加されました。
このオプションの効果について説明します。
Oracle APEX 23.1で追加されたRAWセレクタの使用をオンにすると、指定したセレクタはそのまま使用されます。その結果、アスタリスクを含んだセレクタが機能するようになります。
以下のJSONドキュメントを返すRESTサービスがあるとします。
{
"items" : {
"rs1" : {
"rows": [
{
"data": {
"id": 1,
"name": "Kenny"
}
},
{
"obj": {
"id": 2,
"name": "Sam"
}
}
]
},
"rs2" : {
"rows": [
{
"data" : {
"id": 23,
"name": "Jane"
}
},
{
"obj": {
"id": 24,
"name": "Kate"
}
}
]
}
}
}
属性rs1、rs2を区別せず、また、dataとobjも区別せずに4行のデータとしてRESTデータ・ソースが返すようにするために、RAWセレクタの使用をオンにして、行セレクタと列のセレクタに以下を指定します。
行セレクタ: items.*.rows[*]
列IDのセレクタ: $.*.id
列NAMEのセレクタ: $.*.name
RAWセレクタの使用がオフのときは、Oracle APEXが指定した行セレクタの末尾に[*]を追加します。そのため行セレクタに[*]は付けません。RAWセレクタをオンにしたときは、開発者が行セレクタの末尾に[*]を追加する必要があります。
内部的には以下のようなSQLが実行されます。セレクタがそのまま使われています。
select jt.*
from raw_test r, json_table(r.data, '$.items.*.rows[*]'
columns
(
id number path '$.*.id',
name varchar2(20) path '$.*.name'
)
) jt;
RAWセレクタがオフの時に実行されるSQLは以下です(行セレクタの末尾からは[*]を除いています)。
select jt.*
from raw_test r, json_table(r.data, '$."items"."*"."rows"[*]'
columns
(
id number path '$."*"."id"',
name varchar2(20) path '$."*"."name"'
)
) jt;
アスタリスクが含まれている場合、上記のSELECT文は行を返しません。
Oracle APEX 23.1で追加された行セレクタの説明は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完