14.8 CREATE LIBRARY文

CREATE LIBRARY文を使用すると、ライブラリ、つまりオペレーティング・システムの共有ライブラリに関連付けられたスキーマ・オブジェクトが作成されます。

注意:

CREATE LIBRARY文は、共有ライブラリおよび動的リンクをサポートするプラットフォーム上でのみ有効です。

オペレーティング・システムの共有ライブラリ(DLL)の作成方法は、『Oracle Database開発ガイド』を参照してください。

このライブラリ・スキーマ・オブジェクトの名前は、SQLおよびPL/SQLによって第三世代言語(3GL)ファンクションおよびプロシージャを起動できるように、CREATE FUNCTION文またはCREATE PROCEDURE文のcall_specで使用したり、パッケージまたは型のファンクションまたはプロシージャを宣言する際に使用できます。

ここでのトピック

前提条件

自分のスキーマ内にライブラリを作成するには、CREATE LIBRARYシステム権限が必要です。他のユーザーのスキーマ内にライブラリを作成する場合は、CREATE ANY LIBRARYシステム権限が必要です。

ディレクトリ・オブジェクト内のDLLに関連付けられるライブラリを作成するには、そのディレクトリ・オブジェクトに対するEXECUTEオブジェクト権限が必要です。

資格証明名に関連付けられるライブラリを作成するには、その資格証明名に対するEXECUTEオブジェクト権限が必要です。

CREATE FUNCTION文のcall_specでライブラリを使用したり、パッケージまたは型のファンクションを宣言する場合には、そのライブラリに対するEXECUTEオブジェクト権限とCREATE FUNCTIONシステム権限が必要です。

CREATE PROCEDURE文のcall_specでライブラリを使用したり、パッケージまたは型のプロシージャを宣言する場合には、そのライブラリに対するEXECUTEオブジェクト権限とCREATE PROCEDUREシステム権限が必要です。

call_specで定義したプロシージャまたはファンクション(パッケージまたは型で定義したプロシージャまたはファンクションを含む)を実行するには、そのプロシージャまたはファンクションに対するEXECUTEオブジェクト権限が必要です(ただし、ライブラリに対するEXECUTEオブジェクト権限は不要です)。

構文

create_library ::=

セマンティクス

create_library

OR REPLACE

ライブラリが存在する場合は、ライブラリを再作成し、再コンパイルします。

再定義する前のライブラリに対する権限を付与されていたユーザーは、権限を再付与される必要なく、ライブラリにアクセスできます。

[ EDITIONABLE | NONEDITIONABLE ]

schemaでスキーマ・オブジェクト・タイプLIBRARYに対してエディションが有効になっている場合に、ライブラリがエディション・オブジェクトまたは非エディション・オブジェクトのどちらになるかを指定します。デフォルト: EDITIONABLE。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

plsql_library_source

schema

ライブラリが含まれているスキーマの名前。デフォルト: 自分のスキーマ。

library_name

call_specとともにファンクションまたはプロシージャを宣言する場合に、このライブラリを表す名前。

'full_path_name'

一重引用符で囲まれた文字列リテラルであり、オペレーティング・システムにより共有ライブラリのフルパス名として認識されます。

CREATE LIBRARY文の実行中は、full_path_nameは解釈されません。共有ライブラリの存在は、ユーザーによりそのサブプログラムの1つが起動されるとチェックされます。

'file_name' IN directory_object

file_nameは一重引用符で囲まれた文字列リテラルであり、値はdirectory_object内のダイナミック・リンク・ライブラリ(DLL)の名前になります。文字列リテラルは2,000バイトを超えてはならず、またパス・デリミタを含むことはできません。コンパイラによりfile_nameは無視されますが、実行時にはfile_nameでパス・デリミタの有無がチェックされます。

directory_object

directory_objectは、CREATE DIRECTORY文を使用して作成されるディレクトリ・オブジェクトです(『Oracle Database SQL言語リファレンス』を参照)。directory_objectが存在しない場合、またはdirectory_objectに対するEXECUTEオブジェクト権限がない場合、ライブラリはエラーとともに作成されます。続けてdirectory_objectが作成されても、ライブラリは無効になります。ライブラリが無効になるその他の理由は次のとおりです。

  • directory_objectが削除された。

  • directory_objectが無効になった。

  • directory_objectに対するEXECUTEオブジェクト権限が取り消された。

事前定義のPATH_PREFIXを含むPDB内にライブラリ・オブジェクトを作成する場合、そのライブラリでディレクトリ・オブジェクトを使用する必要があります。ディレクトリ・オブジェクトはPATH_PREFIXの規則をライブラリ・オブジェクトに強制します。ライブラリ・オブジェクトでディレクトリ・オブジェクトを使用しなかった場合、コンパイル・エラーが発生します。

事前定義のPATH_PREFIXを持つPDBとしてデータベースがCDBにプラグインされている場合、ディレクトリ・オブジェクトを使用していないライブラリを使用しようとすると、ORA-65394エラーが発生します。ライブラリ・オブジェクトは無効化されませんが、これを使用できるようにするには、ディレクトリ・オブジェクトを使用して再作成する必要があります。 CDB管理の詳細は、『Oracle Multitenant管理者ガイド』を参照してください。

AGENT 'agent_dblink'

サーバー以外のデータベース・リンクから外部プロシージャを実行できます。Oracle Databaseでは、agent_dblinkによって指定されたデータベース・リンクを使用して外部プロシージャを実行します。この句を省略すると、サーバー上のデフォルト・エージェント(extproc)によって外部プロシージャが実行されます。

CREDENTIAL [schema.]credential_name

ライブラリを指定する外部サブプログラムの実行時にextprocエージェントが偽装するオペレーティング・システム・ユーザーの資格証明を指定します。デフォルト: Oracle Databaseインストールの所有者。

credential_nameが存在しない場合、またはcredential_nameに対するEXECUTEオブジェクト権限がない場合、ライブラリはエラーとともに作成されます。続けてcredential_nameが作成されても、ライブラリは無効になります。ライブラリが無効になるその他の理由は次のとおりです。

  • credential_nameが削除された。

  • credential_nameが無効になった。

  • credential_nameに対するEXECUTEオブジェクト権限が取り消された。

資格証明の使用の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

例14-17 ライブラリの作成

次の文は、ディレクトリ・オブジェクトを使用して、ライブラリext_libを作成します。

CREATE LIBRARY ext_lib AS 'ddl_1' IN ddl_dir;
/

次の文によって、ディレクトリ・オブジェクトと資格証明を使用して、ライブラリext_libが再作成されます。

CREATE OR REPLACE LIBRARY ext_lib AS 'ddl_1' IN ddl_dir CREDENTIAL ddl_cred;
/

次の文によって、明示的なパスを使用して、ライブラリext_libが作成されます。

CREATE LIBRARY ext_lib AS '/OR/lib/ext_lib.so';
/

次の文によって、明示的なパスを使用して、ライブラリext_libが再作成されます。

CREATE OR REPLACE LIBRARY ext_lib IS '/OR/newlib/ext_lib.so';
/

例14-18 外部プロシージャ・エージェントの指定

次の例は、ライブラリapp_libを作成し(明示的なパスを使用して)、外部プロシージャがパブリック・データベースsales.hq.example.comから実行されるよう指定します。

CREATE LIBRARY app_lib as '${ORACLE_HOME}/lib/app_lib.so'
   AGENT 'sales.hq.example.com';
/

関連項目:

データベース・リンクの作成の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。