2023年6月15日木曜日

対話グリッドでJSON列を扱う

対話グリッドでJSON列を持っている表を扱ってみます。

例で使用する表は以下の定義で作成します。
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の属性であるcolorsizeが検索列に現れるようにします。

以下のようなドット記法による記述も可能です。


対話グリッドのソースとなる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のアプリケーション作成の参考になれば幸いです。