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ユーザーズ・ガイド』を参照してください。