1
0

Oracle Database 23aiで追加されたMLE JavaScriptの基本的な使い方紹介

Last updated at Posted at 2023-09-08

Oracle Database 23aiではMultilingual Engine(以下MLE)のJavaScriptに関する機能が大幅に強化されています。
23aiでは一度実装したコードをスキーマ・オブジェクトとして保存し、任意のタイミングで呼び出したり、他のコードへimportできるようになっています。

以前投稿したこちらの記事ではいきなりMLEの応用的な新機能を紹介してしまいましたが、改めて基本要素を本記事にまとめておこうと思います。

なお以下は23aiマニュアル(Free - Developer Release版)の参考資料です。

事前準備

MLE JavaScriptを利用するには対象のDBユーザに対して以下の権限を付与する必要があります。

-- JavaScriptをOracle Database上で実行するための権限
GRANT EXECUTE ON JAVASCRIPT TO <ユーザ名>;
-- MLE ModuleやMLE Environmentを作成するための権限
GRANT CREATE MLE TO <ユーザ名>;
-- MLE Moduleの呼び出しに使うPL/SQLプロシージャの作成権限
GRANT CREATE PROCEDURE TO <ユーザ名>;
-- JavaScript実行後デバッグ機能の利用に必要な権限
GRANT COLLECT DEBUG INFO ON <module> TO <ユーザ名>;

MLE JavaScript実装の基本

MLE JavaScriptをオブジェクトとして保存し、再利用できるようにするには、以下3つのオブジェクトを作成する必要があります。

  • MLE Module:
    • メインのJavaScriptのコードを格納
  • MLE Environment:
    • MLE Moduleを実行する際に必要となる他MLE Moduleのimportや、Strictモードなどのパラメータを指定
  • MLE Module Call:
    • MLE Moduleを呼び出すためのプロシージャ

今回は例として、入力された値の階乗を計算する処理をMLE JavaScriptで実装してみます。
まずはメインとなる階乗の計算をするMLE Moduleが以下になります。

CREATE MLE MODULE IF NOT EXISTS 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 ) );
  }
}
/

次に、MLE Module「factorial_mod」を他のMLE Moduleでimportして使えるよう、MLE Environmentを作成します。

-- IMPORTS('<別のMLE Moduleでimport時に指定する別名>', MODULE <import対象のMLE Module名>)
CREATE MLE ENV my_factorial_env IMPORTS('FACTORIAL_MOD' MODULE FACTORIAL_MOD)
/

さらに factorial_mod をimportするMLE Moduleを作成します。

CREATE OR REPLACE MLE MODULE mod_imp_fact LANGUAGE JAVASCRIPT AS

import * as h from "FACTORIAL_MOD"

export function printAnswer(num){
    let ans = h.factorial(num);
    console.log(`The factorial of ${num} is: ${ans}`);
}
/

JavaScriptパートのimportでは、MLE Environment「my_factorial_env」で設定したimport時の別名を指定しています。
今回はMLE Module名と同名になっています。

最後にMLE Module「mod_imp_fact」を実行するためのMLE Module Call(プロシージャ)を作成します。

CREATE OR REPLACE PROCEDURE mod_imp_fact_proc(num NUMBER)
AS MLE MODULE mod_imp_fact
ENV my_factorial_env
SIGNATURE 'printAnswer(number)';
/

PROCEDURE句に実行時に利用するプロシージャ名を、ENV句には今回利用するMLE Environmentを指定します。
AS MLE Module句には実行するMLE Module名を指定します。
またSIGNATURE句には呼び出すJavaScriptの関数を指定します。

では作成したMLE Module Callを実行してみます。

SQL> set serveroutput on
SQL> EXEC mod_imp_fact_proc(3);
The factorial of 3 is: 6

PL/SQLプロシージャが正常に完了しました。

以上がMLE JavaScriptの基本的な使い方になります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0