例で使用する表は以下の定義で作成します。
create table jig_clothes (
id number generated by default on null as identity
constraint jig_clothes_id_pk primary key,
name varchar2(80 char) not null,
features blob check (features is json),
price number
)
;
JSON列のfeaturesには、色(color)とサイズ(size)の指定が含まれているとします。以下がJSONの例です。{
color: "red",
size: "M"
}
対話グリッドで、列NAME、COLOR、SIZE、PRICEがある表と同じ操作ができるようにします。
まずは、表JIG_CLOTHESをデータ・ソースとした対話グリッドを含むAPEXアプリケーションを作成します。
アプリケーション作成ウィザードを起動します。ホーム・ページを削除し、代わりに対話グリッドのページを追加します。
追加する対話グリッドのページ名はClothesとします。表またはビュー、編集を許可を選択し、表またはビューとして表JIG_CLOTHESを選択します。
アプリケーションが作成されたら、対話グリッドのページを開きます。
最初に対話グリッドのソースのタイプをSQL問合せに変更し、SQL問合せとして以下を記述します。ファンクションjson_tableを使って、JSONの属性であるcolorとsizeが検索列に現れるようにします。
以下のようなドット記法による記述も可能です。
対話グリッドのソースとなるSQL問合せを上記のように変更すると、標準の行の自動処理(DML)による行の挿入、更新、削除は行えません。
そのため行の自動処理(DML)の設定のターゲット・タイプをPL/SQL Codeに変更し、挿入/更新/削除するPL/SQLコードに以下を記述します。
失われた更新の防止はオンです。
行のロックはPL/SQL Codeに変更し、行をロックするPL/SQLコードとして以下を記述します。
以上で実装は完了です。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/ig-with-json-column.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完