※ 本記事は、Martin Bachによる”Using JavaScript community modules in Oracle Database 23c Free – Developer Release“を翻訳したものです。
2023年4月26日
電子メール検証の実行
オープンソース・コミュニティによって提供される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;
