Autonomous Databaseでデータベース組み込みのJavaVMが使えるようになりました。今まではSEM_MATCH関数を使うことができなかったので、JavaVMを有効にして動作を確認してみます。
確認作業として、以前の記事「Oracle APEXよりGraphの機能を呼び出してみる」に記載している作業をやり直してみます。以下の一連のコマンドを実行します。
最初にネットワークNET1を作成します。
次にモデルM1を作成します。
作成したモデルM1を確認します。
SEM_MATCH関数を含んだ問合せを発行します。Autonomous DatabaseではJavaVMが使えないためエラーが発生します。
※) SEM_MATCH関数の引数network_ownerとしてsys_context('USERENV','current_schema')を指定すると以下のエラーが発生するため、APEXのワークスペース・スキーマ名を直接指定します。
Autonomous DatabaseのJavaVMを有効にします。マニュアルの以下の記載に従います。
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_FEATURE(
feature_name => 'JAVAVM' );
END;
/
データベース・アクションにユーザーADMINで接続して、上記のSQLを実行します。JAVAVMを有効化した後、Autonomous Databaseの再起動を行います。
マニュアルのNotes for Oracle Java on Autonomous Databaseに、一旦JAVAVMを有効化すると無効にはできない、また、メンテナンス時にはJavaの機能が使えなくなる、との注意書きがあります。
During the maintenance window, during the Java patching phase there would be no response for Java session calls or you would see an
ORA-29548
error. After the maintenance window completes, Java usage is restored.JavaVMを使うとAutonomous Databaseの可用性は低くなるため、必要なときに限り(例えば今回のようにSEM_MATCH関数を使いたいなど)JAVAVMを有効化するのが良いでしょう。
JavaVMを有効化した後、再度SEM_MATCH関数を含んだ問合せを発行します。
今度は検索結果が返されます。SEM_MATCH関数が使えるようになりました。
SEM_APIS.SPARQL_TO_SQLも実行してみます。こちらも結果が返ってきます。
以前の記事で作成したAPEXアプリケーションRDF Graphも変更します。
ページ・デザイナでページ番号1の対話モード・レポートのページを開きます。
ページ・アイテムP1_SPARQLとして、SPARQLの問合せ文を入力するテキスト・フィールドを作成します。
SEM_MATCH関数の引数queryにバインド変数を割り当てることができなかったため(およびnvlやcoalesce関数でバインド変数がNULLのときに固定したSPARQL文を割り当てることができなかった)、SEM_APIS.SPARQL_TO_SQLを代わりに使用しています。
送信するページ・アイテムとしてP1_SPARQLを指定します。
ページ・アイテムP1_SPARQLに入力したSPARQL問合せを実行するボタンを作成します。
識別のボタン名はB_SUBMIT、ラベルを送信とします。レイアウトのリージョンとしてRDF Graph、位置としてNextを選択します。ブレッドカラムの右端にボタンが配置されます。動作のアクションは、デフォルトのページの送信から変更しません。
SELECT ?s ?p ?o WHERE { ?s ?p ?o }
そのため、レポート列として?s ?p ?o(主語、述語、目的語)に関連する列が認識されています。P1_SPARQLとして与えるSPARQLの問合せ文の検索結果を?s ?p ?oから変更すると、認識済みの列と一致しなくなります。そのため変更できるのは検索条件のみになります。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/rdf-graph.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完