CREATE JAVA
目的
CREATE
JAVA
を使用すると、Javaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成できます。
関連項目:
-
Javaの概要およびJavaストアド・プロシージャの詳細は、『Oracle Database Java開発者ガイド』を参照してください。
-
JDBCについては、『Oracle Database JDBC開発者ガイド』を参照してください。
前提条件
自分のスキーマにJavaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成または再作成する場合は、CREATE
PROCEDURE
システム権限が必要です。他のユーザーのスキーマ内にスキーマ・オブジェクトを作成または再作成する場合は、CREATE
ANY
PROCEDURE
システム権限が必要です。
構文
create_java::=
セマンティクス
OR REPLACE
OR
REPLACE
を指定すると、既存のJavaクラス、ソースまたはリソースを含むスキーマ・オブジェクトを再作成できます。この句を指定した場合、付与されているオブジェクト権限を削除、再作成および再付与しなくても、既存のオブジェクトの定義を変更できます。
Javaスキーマ・オブジェクトを再定義し、RESOLVE
またはCOMPILE
を指定した場合、そのオブジェクトが再コンパイルまたは変換されます。正常に変換またはコンパイルされたかどうかにかかわらず、Javaスキーマ・オブジェクトを参照するクラスは有効になります。
再定義したファンクションに対して権限が付与されていたユーザーは、権限を再付与されなくても、そのファンクションにアクセスできます。
関連項目:
その他の情報は、「ALTER JAVA」を参照してください。
RESOLVE | COMPILE
RESOLVE
およびCOMPILE
は、同義のキーワードです。この文が正常に実行された場合に作成されるJavaスキーマ・オブジェクトを変換することを指定します。
-
クラスに適用された場合、他のクラス・スキーマ・オブジェクトに対する参照名に変換されます。
-
ソースに適用された場合、ソースがコンパイルされます。
RESOLVEおよびCOMPILEの制限事項
Javaリソースには、これらのキーワードを指定できません。
NOFORCE
RESOLVE
またはCOMPILE
を指定しても、正常に変換またはコンパイルできない場合は、NOFORCE
を指定するとCREATE
コマンドの結果をロールバックできます。このオプションを指定しないと、正常に変換またはコンパイルできない場合でも何も処理が行われず、作成されたスキーマ・オブジェクトはそのままです。
NAMED句
NAMED
句は、Javaソースまたはリソースの場合に指定します。primary_name
は、二重引用符で囲む必要があります。長さの上限は、データベース文字セットで4000バイトです。
-
Javaソースの場合、この句にはソース・コードが保持されているスキーマ・オブジェクト名を指定します。正常な
CREATE
JAVA
SOURCE
文は、ソースによって定義されたJavaクラスをそれぞれ保持するために、追加スキーマ・オブジェクトも作成します。 -
Javaリソースの場合、この句にはJavaリソースを保持するスキーマ・オブジェクト名を指定します。
primary_name
の小文字、または大文字と小文字の組合せを保持するには、二重引用符を使用します。
schema
を指定しない場合、自分のスキーマにそのオブジェクトが作成されます。
NAMED Javaクラスの制限事項
NAMED
句には、次の制限事項があります。
-
Javaクラスには、
NAMED
を指定できません。 -
primary_name
は、データベース・リンクを含むことはできません。
SCHEMA句
SCHEMA
句は、Javaクラスにのみ適用されます。このオプションは、Javaファイルを含むオブジェクトが存在するスキーマを指定します。この句を指定しない場合、自分のスキーマにそのオブジェクトが作成されます。
SHARING
この句は、アプリケーション・ルートにJavaスキーマ・オブジェクトを作成する場合にのみ適用されます。このタイプのオブジェクトはアプリケーション共通オブジェクトと呼ばれ、アプリケーション・ルートに属するアプリケーションPDBと共有できます。Javaスキーマ・オブジェクトの共有方法を決定するには、次の共有属性のいずれかを指定します。
-
METADATA
- メタデータ・リンクはJavaスキーマ・オブジェクトのメタデータを共有しますが、データは各コンテナに固有です。このタイプのJavaスキーマ・オブジェクトは、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。 -
NONE
- Javaスキーマ・オブジェクトは共有されません。
この句を指定しない場合、DEFAULT_SHARING
初期化パラメータの値を使用して、Javaスキーマ・オブジェクトの共有属性が決定されます。DEFAULT_SHARING
初期化パラメータに値が含まれていない場合、デフォルトはMETADATA
です。
Javaスキーマ・オブジェクトの共有属性を作成後に変更することはできません。
関連項目:
-
DEFAULT_SHARING
初期化パラメータの詳細は、Oracle Databaseリファレンスを参照してください -
アプリケーション共通オブジェクトの作成の詳細は、『Oracle Database管理者ガイド』を参照してください。
invoker_rights_clause
invoker_rights_clause
を使用すると、クラスを所有するユーザーのスキーマ内で、そのユーザーの権限を使用してクラスのメソッドが実行されるか、または、CURRENT_USER
のスキーマ内で、そのユーザーの権限を使用してクラスのメソッドを実行するかを指定できます。
また、この句は、問合せ、DML操作、およびその型のメンバー・ファンクションおよびプロシージャ内の動的SQL文の外部名の変換方法も定義します。
AUTHID CURRENT_USER
CURRENT_USER
を使用すると、クラスのメソッドがCURRENT_USER
権限で実行されることを指定できます。この句はデフォルトで、実行者権限クラスを作成します。
また、この句は、問合せ、DML操作、および動的SQL文の外部名をCURRENT_USER
のスキーマで変換することも指定します。他のすべての文における外部名は、メソッドを含むスキーマで変換します。
AUTHID DEFINER
DEFINER
を使用すると、クラスが存在するスキーマの所有者権限でクラスのメソッドを実行すること、およびクラスが存在するスキーマで外部名を変換することを指定できます。この句によって定義者権限クラスが作成されます。
関連項目:
-
CURRENT_USER
の判断方法については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
RESOLVER句
RESOLVER
句を使用すると、Javaスキーマ・オブジェクトに対する完全修飾Java名のマッピングを指定できます。ここでは次のとおりです。
-
match_string
は、完全修飾Java名、そのようなJava名と一致するワイルド・カードまたは任意の名前と一致するワイルド・カードを指定します。 -
schema_name
は、対応するJavaスキーマ・オブジェクトを検索するスキーマを指定します。 -
schema_name
の代替としてのダッシュ(-)は、match_string
が有効なJava名と一致した場合、名前が変換されないことを示します。名前の変換は成功しますが、実行時にクラスがその名前を使用することはできません。
このマッピングは、後の変換で(暗黙的に、またはALTER
JAVA
... RESOLVE
文で明示的に)使用されるコマンドで作成されるスキーマ・オブジェクトの定義とともに格納されます。
USING句
USING
は、Javaクラスまたはリソースに対する文字データ(CLOB
またはBFILE
)またはバイナリ・データ(BLOB
またはBFILE
)の順序を決定します。文字の順序を使用して、1つのファイルがJavaクラスまたはリソースに、または1つのソース・ファイルおよび1つ以上の導出クラスがJavaソースに定義されます。
BFILE句
順序を含む、オペレーティング・システム(directory_object_name
)およびサーバー・ファイル(server_file_name
)であらかじめ作成されているファイルのディレクトリおよびファイル名を指定します。BFILE
は、通常、CREATE
JAVA
SOURCE
によって文字順序として、CREATE
JAVA
CLASS
またはCREATE
JAVA
RESOURCE
によってバイナリ順序として解析されます。
CLOB | BLOB | BFILE 副問合せ
指定した型(CLOB
、BLOB
またはBFILE
)の行と列を選択する副問合せを指定します。列の値は文字列を構成します。
ノート:
以前のリリースでは、USING
句は暗黙的にキーワードSELECT
を提供しました。今回のリリースでは提供されません。ただし、キーワードSELECT
なしの副問合せは、(下位互換性のために)サポートされています。
key_for_BLOB
key_for_BLOB
句は、次の暗黙的な問合せを提供します。
SELECT LOB FROM CREATE$JAVA$LOB$TABLE WHERE NAME = 'key_for_BLOB';
key_for_BLOB句の制限事項
このケースを使用するには、表CREATE$JAVA$LOB$TABLE
が現行のスキーマ内に存在し、かつ、BLOB
型の列LOBおよびVARCHAR2
型の列NAME
がこの表に含まれている必要があります。
AS source_char
Javaソースの文字列を指定します。
例
Javaクラス・オブジェクトの作成: 例
次の文は、Javaバイナリ・ファイルに含まれる名前を使用して、Javaクラスを含むスキーマ・オブジェクトを作成します。
CREATE JAVA CLASS USING BFILE (java_dir, 'Agent.class') /
この例では、JavaクラスAgent.class
を含むオペレーティング・システム・ディレクトリを指すディレクトリ・オブジェクトjava_dir
がすでに存在していると想定しています。この例では、クラス名がJavaクラス・スキーマ・オブジェクトの名前を決定します。
Javaソース・オブジェクトの作成: 例
次の文は、Javaソース・スキーマ・オブジェクトを作成します。
CREATE JAVA SOURCE NAMED "Welcome" AS public class Welcome { public static String welcome() { return "Welcome World"; } } /
Javaリソース・オブジェクトの作成: 例
次の文は、apptext
という名前のJavaリソース・スキーマ・オブジェクトをbfile
から作成します。
CREATE JAVA RESOURCE NAMED "appText" USING BFILE (java_dir, 'textBundle.dat') /