MLEにJavaScriptコードを指定するための追加オプション
MLEモジュールのJavaScriptソース・コードは、PL/SQLを使用してインラインで指定できますが、BFILE、BLOBまたはCLOBを使用して指定することもできます。この場合、ソース・ファイルはUTF8でエンコードする必要があります。
BFILE句を使用してMLEモジュールを作成すると、GoldenGateなどの論理レプリケーションで問題が発生する可能性があります。DDLコマンドがターゲット・データベースで成功するには、ターゲット・データベースに同じディレクトリが存在する必要があります。さらに、このディレクトリに同じJavaScriptファイルが存在する必要があります。これらの条件が満たされないと、ターゲット・データベースでMLEモジュールを作成するコールが失敗します。
BFILEを使用するかわりに、BLOBまたはCLOBを使用して、MLEモジュールを作成することもできます。例3-5に、CLOBを使用してJavaScriptモジュールを作成する方法を示します。BLOBを使用する場合、構文は同じですが、BLOBの値はCLOBの値とは異なります。
もう1つの選択肢は、SQLclでmle create-moduleコマンドを使用してJavaScriptファイルをデータベースにロードすることです。JavaScriptファイルからモジュールが直接作成されるので、DDL文の間にJavaScriptコードを入れる必要はありません。これは、lint、ローカル・ユニット・テストおよび書式設定ツールの使用などの通常のプログラミング・ステップをより便利に実行できることを意味します。SQLclの使用は、継続的インテグレーション(CI)パイプラインに特に適している可能性があります。
例3-4 BFILEを使用したJavaScriptソース・コードの指定
この例では、JS_SRC_DIRは、myJavaScriptModule.jsというファイルにモジュールのソース・コードを含むローカル・ファイル・システム上の場所にマッピングするデータベース・ディレクトリ・オブジェクトです。ディレクトリの場所からファイルをロードすると、MLEはソース・コードをディクショナリに格納します。それ以降MLEモジュールをコールしても、ソース・コードがディスクからリフレッシュされることはありません。myJavaScriptModule.jsに新しいバージョンのモジュールが格納されている場合は、別のCREATE OR REPLACE MLE MODULEのコールを使用してデプロイする必要があります。
CREATE MLE MODULE mod_from_bfile
LANGUAGE JAVASCRIPT
USING BFILE(JS_SRC_DIR,'myJavaScriptModule.js');
/
例3-5 CLOBを使用したJavaScriptソース・コードの指定
CREATE OR REPLACE MLE MODULE mod_from_clob_inline
LANGUAGE JAVASCRIPT USING CLOB (
SELECT q'~
export function clob_hello(who){
return `hello, ${who}`;
}
~')
/
別の方法として、表に格納されているJavaScriptソース・コードを使用することもできます。このバリエーションの例では、スキーマに、src列のJavaScriptソース・コードを含むjavascript_srcという名前の表と、追加のメタデータがあると想定しています。次の文は、CLOBをフェッチしてモジュールを作成します。
CREATE OR REPLACE MLE MODULE mod_from_clob_table
LANGUAGE JAVASCRIPT USING CLOB (
SELECT src
FROM javascript_src
WHERE
id = 1 AND
commit_hash = 'ac1fd40'
)
/
このようなステージング表は、継続的インテグレーション(CI)パイプラインを使用してJavaScriptコードをデータベースにデプロイする環境にあります。
例3-6 SQLclを使用したJavaScriptソース・コードの指定
この例では、モジュールのソース・コードはmyJavaScriptModule.jsというファイル内にあり、このファイルはtmpというローカル・ファイル・ディレクトリ・フォルダに配置されています。次のコマンドは、my_js_modというモジュールを作成します。モジュールが存在する場合はそれを置換し、存在しない場合は新しく作成します。
mle create-module -
-language javascript -
-replace -
-filename /tmp/myJavaScriptModule.js -
-module-name my_js_mod
SQLcl MLEコマンドとその構文の詳細は、『Oracle SQLclユーザーズ・ガイド』を参照してください。
親トピック: MLEでのJavaScriptモジュールの使用