Oracle Database 23c Freeの環境上でJavaScriptのMLEモジュールを作成し、APEXのSQLコマンドより呼び出してみます。
マニュアルの記載部分は以下になります。
JavaScript Developer's Guide2 MLE JavaScript Modules and EnvironmentsJavaScript Developer's Guide
マニュアルに記載されている例に間違いがあるため、一部を変更しています。最初にMLEモジュール(JavaScriptモジュール)factorial_modを作成します。ファンクションfactorialがエクスポートされます。
CREATE OR REPLACE MLE MODULE factorial_mod LANGUAGE JAVASCRIPT AS
export function factorial(num) {
if(num < 0) {
return -1;
} else if (num == 0) {
return 1;
} else {
return(num * factorial(num-1));
}
}
/
DDLなので、言語はSQLを選択します。
次にMLE環境を作成します。マニュアルの例を少し変更し、環境名やインポート名に小文字を使うようにしました。モジュール名またはインポート名を指定する箇所の違いが分かりやすくなると思います。
CREATE MLE ENV "myFactorialEnv" IMPORTS('factorialMod' MODULE FACTORIAL_MOD);
/
こちらもDDLなので、言語はSQLを選択します。
MLEモジュールFACTORIAL_MODのfactorialを呼び出してみます。
以下を実行します。今度はJavaScriptの実行なので、言語にJavaScript(MLE)を選択します。また、モジュールのインポートを行うため環境としてmyFactorialEnvを選択します。
const { factorial } = await import('factorialMod');
console.log(factorial(3));
実行すると、結果に6が表示されます。
SQLコマンドから、MLEモジュールとして作成したファンクションを呼び出すことができました。
SQL Developer Web(データベース・アクション)にも、MLE JSというJavaScriptを実行するツールが含まれています。
スニペットとして全く同じコードを実行してみましたが、解析エラーが発生します。この原因は、今のところ不明です。
エクスポートしたJavaScriptのファンクションfactorialを、SQLから呼び出せるようにします。ファンクションを作成し、JavaScriptのファンクションをSIGNATUREに指定します。
CREATE OR REPLACE FUNCTION js_factorial(
p_num number)
return number
AS MLE MODULE FACTORIAL_MOD
SIGNATURE 'factorial(number)';
/
ファンクションが作成されたら、以下のSQLを実行し作成したファンクションjs_factorialを呼び出してみます。
select js_factorial(3) from dual;
結果に6が出力されます。
Oracle APEXのアプリケーションに適用されるMLE環境は、アプリケーション定義のセキュリティのデータベース・セッションのセクションにあるMLE環境で設定します。
MLEでJavaScriptモジュールを扱う方法の紹介は以上です。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完