2023年4月13日木曜日

Gistに保存したコードからMLE JavaScriptモジュールを作成する

以前の記事DB 23cのMLEでJavaScriptモジュールを作成するにて、以下のDDLによりDB 23cのMLE JavaScriptモジュールfactorial_modを作成しています。

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));
    }
}
/
このJavaScriptのコードをDDL中に記述する代わりに、Gistに作成したスニペットを使用します。


例えば以下のURLより、Gistのスニペットを取得できます。

https://gist.githubusercontent.com/ujnak/1808026f3728baedc908b5baf8ac4b99/raw/4dbf9898971f8b696eb83d86f33f2246ecb6d40d/factorial_mod.js

ホストgist.githubusercontent.comへRESTコールアウトができない場合は、以下のコードをSYSで実行して、コールアウトを許可します。
begin
  DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
    host => 'gist.githubusercontent.com',
    ace => xs$ace_type(
        privilege_list => xs$name_list('connect','resolve'),
        principal_name => 'APEX_220200',
        principal_type => xs_acl.ptype_db));
  commit; 
end;
/
ネットワークACLの設定については、以下の記事で解説しています。

Autonomous DatabaseのAPEXでUTL_HTTPを使用する
APEXのアップグレードで忘れがちなネットワークACLの設定

以上の準備が済んだところで、JavaScriptのモジュールを作成します。以下のDDLを実行します。(23cからfrom dualが不要になりました。このコードではfrom dualを省いています。)


オブジェクト・ブラウザMLEモジュール - JavaScriptから、作成したモジュールFACTORIAL_MODを確認します。


Gistを例に取りましたが、HTTPで呼び出すことができればリポジトリは選ばないでしょう。特殊な認証が必要な場合は、一旦データベースにCLOBとして保存した上でJavaScriptモジュールを作成する必要がありそうです。

どちらにしても、DDLからソースコードを除くことにより、CI/CDに載せることが容易になるはずです。