注意:
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::=
plsql_library_source ::=
セマンティクス
OR REPLACE
ライブラリが存在する場合は、ライブラリを再作成し、再コンパイルします。
再定義する前のライブラリに対する権限を付与されていたユーザーは、権限を再付与される必要なく、ライブラリにアクセスできます。
[ EDITIONABLE | NONEDITIONABLE ]
schemaでスキーマ・オブジェクト・タイプLIBRARYに対してエディションが有効になっている場合に、ライブラリがエディション・オブジェクトまたは非エディション・オブジェクトのどちらになるかを指定します。デフォルト: EDITIONABLE。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。
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は、CREATE DIRECTORY文を使用して作成されるディレクトリ・オブジェクトです(『Oracle Database SQL言語リファレンス』を参照)。directory_objectが存在しない場合、またはdirectory_objectに対するEXECUTEオブジェクト権限がない場合、ライブラリはエラーとともに作成されます。続けてdirectory_objectが作成されても、ライブラリは無効になります。ライブラリが無効になるその他の理由は次のとおりです。
directory_objectが削除された。
directory_objectが無効になった。
directory_objectに対するEXECUTEオブジェクト権限が取り消された。
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-15 ライブラリの作成: 例
次の文は、ディレクトリ・オブジェクトを使用して、ライブラリ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'; /
外部プロシージャ・エージェントの指定: 例
次の例は、ライブラリ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言語リファレンス』を参照してください。