※ 本記事は、Martin Bachによる”Using JavaScript community modules in Oracle Database 23c Free – Developer Release“を翻訳したものです。

2023年4月26日


Oracle Database 23c Free – Developer Releaseは、次世代のOracle Databaseの最初のリリースです。これにより、開発者は、最新のデータ駆動型アプリケーションの開発を簡素化する革新的な23c機能により、アプリケーションの構築をすぐに開始できます。Oracle Database 23cの機能セット全体は、今後12か月以内に一般提供する予定です。

電子メール検証の実行

オープンソース・コミュニティによって提供されるJavaScriptモジュールの使用は、Oracle Database 23c Free – Developer Editionの多くの利点の1つです。

表APIまたはトリガーを使用してHR.EMPLOYEES表に対するDML操作を検証するとします。表の列の1つにEメール・アドレスが格納されており、その列内のデータが有効なEメール・アドレスを表していることを確認する必要があります。SQLドメインの使用など、電子メール・アドレスの妥当性を保証する様々な方法があります。

または、データベースに誤った情報を保存する前に、検証コードの一部を実行することもできます。電子メール・アドレスの検証は新しい問題ではなく、多くの解決策があります。この投稿では、オープン・ソースのvalidator.jsモジュールのisEmail()関数について学習します。Validatorは、多くのオープンソース・ソリューションの1つにすぎませんが、以前はJavaScript/MLE関連投稿で紹介されていたため、もう一度例として選択されています。

プロジェクトのライセンスおよび使用上の影響の詳細は、validatorのGitHubプロジェクト・サイトを参照してください。この記事では、法務およびITセキュリティ部門(および他のパーティ)が、コードでモジュールを使用することは安全であると合意していることを前提としています。通常、アプリケーションでサード・パーティ・コードを使用するには、この記事の範囲外の特定のコンプライアンス・ステップを完了する必要があります。

validator.jsのECMAScriptバージョンを取得

信頼できるモジュールを選択すると、ファイルの元の場所が重要でないかぎり、Validatorモジュールは複数のソースからダウンロードできます。Oracleでサポートされている唯一のCDNであるため、優先CDNからECMAスクリプト(ESM)バージョンのモジュールを取得する必要があります。次の例は、モジュールのECMAスクリプト・バージョンをJSDeliverから取得する方法を示しています。もちろん、その他のオプションもあります。:

curl -Lo validator.min.js https://cdn.jsdelivr.net/npm/validator@latest/+esm

これにより、後で使用するソース・ファイルが生成されます。特定のバージョンのモジュール以降の場合は、必要なリリース番号で最新に置き換えてください。

データベースにMLEモジュールを作成

Oracle Database 23c Free – Developer ReleaseのJavaScriptでは、ディレクトリ・オブジェクトとファイル名を指定して、BFILE句を使用してJavaScriptモジュールを作成できます。このコールを準備するには、データベース・サーバーでvalidator.min.jsを使用可能にする必要があります。この例では、jstestユーザーは、ファイルが存在するjavascript_src_dirディレクトリに対する読取りアクセス権を持ちます。

ファイルを配置すると、モジュールを作成できます。:

create  mle module validator
language javascript
using bfile (javascript_src_dir, 'validator.min.js');
/

データベースに、モジュールが正常に作成されたことが示されます。自分で確認できます。:

col MODULE_NAME for a30
col LANGUAGE_NAME for a30

select 
  module_name, 
  language_name 
from 
  user_mle_modules
where
  module_name = 'VALIDATOR';

MODULE_NAME                    LANGUAGE_NAME
------------------------------ ------------------------------
VALIDATOR                      JAVASCRIPT

Oracle Database 23c Free – DeveloperリリースでのJavaScriptモジュールの作成の詳細は、JavaScript開発者ガイドの第2章を参照してください。

PL/SQLおよびSQLへのモジュール機能の公開

スキーマにモジュールが正常に作成されると、最も難しい部分が完了します。Validatorモジュールでは、ほぼすべての目的のためにかなりの数の文字列validatorsが公開され、プロジェクトのGitHubページにそれらがすべてリストされます。この投稿の概要によると、電子メール・アドレスを検証する必要があります。JavaScriptモジュールからvalidator.isEmail()を公開するには、コール指定が必要です。PL/SQLコール仕様は、モジュールのJavaScript関数をSQLおよびPL/SQLにリンクします。この単純なケースでは、スタンドアロン関数がトリックを実行します。:

create or replace function isEmail(
  p_str varchar2
) return boolean
as mle module validator
signature 'default.isEmail(string)';
/ 

複数のJavaScript関数をPL/SQLおよびSQLで使用できるようにする場合は、関連するコードの論理グループを保持するために、パッケージにそれらをカプセル化する必要があります。

コール仕様およびモジュール・コールの詳細は、JavaScript開発者ガイドの第5章を参照してください。

Eメール・アドレスの検証

スキーマでJavaScriptモジュールが作成され、SQLおよびPL/SQLに公開されると、他のPL/SQLコード・ユニットと同様に使用できます。次に、電子メール検証の例をいくつか示します。:

SQL> select isEmail('abc');

ISEMAIL('AB
-----------
FALSE

SQL> select isEmail('ab@c.de');

ISEMAIL('AB
-----------
TRUE

まとめ

Oracle Database 23c Free – Developer ReleaseでJavaScriptを使用すると、多くの興味深いオープン・ソース・プロジェクトを独自のアプリケーションに統合できます。コンプライアンス・チームおよびセキュリティ・チームがサード・パーティ・コードを使用する懸念がない場合、validator.jsなどのモジュールは、確認したとおりに簡単に統合できます。

付録

Oracle 23c Free – Developer Releaseデータベースに開発者アカウントを作成する方法が不明な場合は、次のsnippetを使用します。コードによってパスワードの入力が求められます。

connect / as sysdba
alter session set container = freepdb1;

drop user if exists jstest cascade;

create user jstest identified by &secretpassword
default tablespace users quota unlimited on users;

grant create session to jstest;
grant db_developer_role to jstest;
grant execute on javascript to jstest;

drop directory if exists javascript_src_dir;
create directory javascript_src_dir as '/home/oracle/devel/js/validator';
grant read on directory javascript_src_dir to jstest;