注意:
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言語リファレンス』を参照してください。