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」を参照してください。
IF NOT EXISTS
IF NOT EXISTSを指定すると、次の効果が得られます。
-
オブジェクトが存在していない場合は、文の最後に新しいオブジェクトが作成されます。
-
オブジェクトが存在している場合、これは文の最後の時点にあるオブジェクトになります。古いものが検出されるため、新しいものは作成されません。
単一の文には、一度に1つのOR REPLACEまたはIF NOT EXISTSを指定できます。同じ文でOR REPLACEとIF NOT EXISTSの両方を使用すると、ORA-11541: REPLACE and IF NOT EXISTS cannot coexist in the same DDL statementというエラーが発生します。
IF EXISTSはCREATEとともに使用すると、ORA-11543: Incorrect IF NOT EXISTS clause for CREATE statementが発生します。
RESOLVE | COMPILE
RESOLVEおよびCOMPILEは、同義のキーワードです。この文が正常に実行された場合に作成されるJavaスキーマ・オブジェクトを変換することを指定します。
-
クラスに適用された場合、他のクラス・スキーマ・オブジェクトに対する参照名に変換されます。
-
ソースに適用された場合、ソースがコンパイルされます。
RESOLVEおよびCOMPILEの制限事項
Javaリソースには、これらのキーワードを指定できません。
NOFORCE
RESOLVEまたはCOMPILEを指定しても、正常に変換またはコンパイルできない場合は、NOFORCEを指定するとCREATEコマンドの結果をロールバックできます。このオプションを指定しないと、正常に変換またはコンパイルできない場合でも何も処理が行われず、作成されたスキーマ・オブジェクトはそのままです。
NAMED句
NAMED句は、Javaソースまたはリソースの場合に指定します。primary_nameは、二重引用符で囲む必要があります。長さの上限は、データベース文字セットで4000バイトです。
-
Javaソースの場合、この句にはソース・コードが保持されているスキーマ・オブジェクト名を指定します。正常な
CREATEJAVASOURCE文は、ソースによって定義された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') /

