この付録では、DBMS_JAVA
パッケージについて説明します。このパッケージのファンクションとプロシージャは、JavaからRDBMS機能にアクセスするためのエントリ・ポイントを提供します。
FUNCTION longname (shortname VARCHAR2) RETURN VARCHAR2
このファンクションは、指定したJavaスキーマ・オブジェクトの完全修飾名を戻します。JavaクラスとJavaメソッドには、SQL識別子の最大長を超える名前を設定できるため、Oracle JVMの内部では、SQLアクセス用の短縮名が使用されます。このファンクションは、すべての切り捨てられた名前の元のJava名を戻します。このファンクションの例では、無効なクラスの完全修飾名を次のように表示します。
SELECT dbms_java.longname (object_name) FROM user_objects WHERE object_type = 'JAVA CLASS' AND status = 'INVALID';
FUNCTION shortname (longname VARCHAR2) RETURN VARCHAR2
データベースにフルネームを指定するには、フルネームを入力として取得し、対応する短い名前を戻すDBMS_JAVA
パッケージのshortname()
ルーチンを使用できます。これは、USER_OBJECTS
ビューの問合せによってロードされたクラスの検証に役立ちます。
FUNCTION get_compiler_option(name VARCHAR2, optionName VARCHAR2) RETURN VARCHAR2
このファンクションは、optionName
パラメータで指定したオプションの値を戻します。これは、Oracle Databaseにより提供されるJavaとSQLJコンパイラに関するオプションの制御に使用するファンクションの1つです。
PROCEDURE set_compiler_option(name VARCHAR2, optionName VARCHAR2, value VARCHAR2)
このプロシージャは、Oracle Databaseにより提供されるJavaとSQLJコンパイラに関するオプションの設定に使用されます。
PROCEDURE reset_compiler_option(name VARCHAR2, optionName VARCHAR2)
このプロシージャは、指定したコンパイラ・オプションをデフォルト値に再設定するために使用されます。
FUNCTION resolver (name VARCHAR2, owner VARCHAR2, type VARCHAR2) RETURN VARCHAR2
このファンクションは、オブジェクトがtype
型のスキーマowner
のオブジェクトname
に対するリゾルバ仕様を戻します。コール元には、EXECUTE
権限、およびこのファンクションを使用するように指定されたオブジェクトへのアクセス権が必要です。
name
パラメータは、このオブジェクトの短縮名です。
type
の値は、SOURCE
またはCLASS
のいずれかです。
エラーがある場合は、NULL
が戻されます。基礎となるオブジェクトが変更された場合は、ObjectTypeChangedException
がスローされます。
このファンクションは次のようにコールできます。
SELECT dbms_java.resolver('tst', 'SCOTT', 'CLASS') FROM DUAL;
次の結果が戻されます。
DBMS_JAVA.RESOLVER('TST','SCOTT','CLASS') ----------------------------------------- ((* SCOTT)(* PUBLIC))
FUNCTION derivedFrom (name VARCHAR2, owner VARCHAR2, type VARCHAR2) RETURN VARCHAR2
このファンクションは、オブジェクトがtype
型のスキーマowner
のオブジェクトname
に対するソース名を戻します。コール元には、EXECUTE
権限、およびこのファンクションを使用するように指定されたオブジェクトへのアクセス権が必要です。
name
パラメータおよび戻されたソース名は、このオブジェクトの短縮名です。
type
の値は、SOURCE
またはCLASS
のいずれかです。
エラーがある場合は、NULL
が戻されます。基礎となるオブジェクトが変更された場合は、ObjectTypeChangedException
がスローされます。
オブジェクトがOracle JVMでコンパイルされなかった場合、戻り値はNULL
になります。
このファンクションは次のようにコールできます。
SELECT dbms_java.derivedFrom('tst', 'SCOTT', 'CLASS') FROM DUAL;
次の結果が戻されます。
DBMS_JAVA.DERIVEDFROM('TST','SCOTT','CLASS') ----------------------------------------- tst
FUNCTION fixed_in_instance (name VARCHAR2, owner VARCHAR2, type VARCHAR2) RETURN NUMBER
このファンクションは、オブジェクトがtype
型のスキーマowner
のオブジェクトname
に対して、永続的に保持されるステータスを戻します。コール元には、EXECUTE
権限、およびこのファンクションを使用するように指定されたオブジェクトへのアクセス権が必要です。
name
パラメータは、このオブジェクトの短縮名です。
type
の値は、RESOURCE
、SOURCE
、CLASS
またはSHARED_DATA
のいずれかです。
戻される数値は、ステータスを保持しないことを示す0
か、保持することを示す1
のいずれかです。
このファンクションは次のようにコールできます。
SELECT dbms_java.fixed_in_instance('tst', 'SCOTT', 'CLASS') FROM DUAL;
次の結果が戻されます。
DBMS_JAVA.FIXED_IN_INSTANCE('TST','SCOTT','CLASS') ----------------------------------------- 0
次の文を考えてみます。
SELECT dbms_java.fixed_in_instance('java/lang/String', 'SYS', 'CLASS') FROM DUAL;
次の結果が戻されます。
DBMS_JAVA.FIXED_IN_INSTANCE('JAVA/LANG/STRING','SYS','CLASS') ------------------------------------------------------------- 1
PROCEDURE set_output (buffersize NUMBER)
このプロシージャは、Javaストアド・プロシージャの出力をリダイレクトし、DBMS_OUTPUT
パッケージにトリガーします。
PROCEDURE export_source(name VARCHAR2, schema VARCHAR2, blob BLOB) PROCEDURE export_source(name VARCHAR2, blob BLOB) PROCEDURE export_source(name VARCHAR2, clob CLOB) PROCEDURE export_source(name varchar2, schema varchar2, src CLOB)
このプロシージャは、Javaソースを、Javaソース・スキーマ・オブジェクトとしてOracle Databaseにエクスポートするために使用されます。ソースは、name
パラメータを使用して指定します。このソースは、BLOB
オブジェクトまたはCLOB
オブジェクトにエクスポートできます。ソースの内部表現にはUTF8形式が使用されるため、BLOB
へのソースの格納にもこの形式が使用されます。ソース・スキーマ・オブジェクトは指定のスキーマで作成されます。スキーマが未指定の場合は、現行スキーマが使用されます。
PROCEDURE export_class(name VARCHAR2, schema VARCHAR2, blob BLOB) PROCEDURE export_class(name VARCHAR2, blob BLOB)
このプロシージャは、name
パラメータで指定したJavaクラスを、Javaクラス・スキーマ・オブジェクトとしてOracle Databaseにエクスポートするために使用されます。クラスのエクスポート先はBLOB
オブジェクトのみで、CLOB
オブジェクトにはエクスポートできません。スキーマが指定されている場合、クラス・スキーマ・オブジェクトは、現行スキーマの他に、指定されたスキーマにも作成されます。
PROCEDURE export_resource(name VARCHAR2, schema VARCHAR2, blob BLOB) PROCEDURE export_resource(name VARCHAR2, blob BLOB) PROCEDURE export_resource(name VARCHAR2, schema VARCHAR2, clob CLOB) PROCEDURE export_resource(name VARCHAR2, clob CLOB)
nameパラメータで指定したリソースが、schema
パラメータで指定したスキーマのリソース・スキーマ・オブジェクトとしてOracle Databaseにエクスポートされます。スキーマが未指定の場合は、現行スキーマが使用されます。このリソースは、CLOB
オブジェクトまたはBLOB
オブジェクトのいずれにもエクスポートできます。
PROCEDURE loadjava(options VARCHAR2) PROCEDURE loadjava(options VARCHAR2, resolver VARCHAR2)
これらのプロシージャでは、loadjava
コマンドライン・ツールではなく、コールを使用して、データベースに複数のクラスをロードできます。このプロシージャは、次のように、使用しているJavaアプリケーション内でコールできます。
CALL dbms_java.loadjava('... options...');
オプションは、コマンドラインで指定する内容と同じです。各オプションは、スペースで区切る必要があります。オプションをカンマで区切らないでください。これに関する唯一の例外は、スペースを含むloadjava -resolver
オプションです。-resolver
の場合は、次のように、最初にすべての他のオプションを指定してカンマで区切り、次に-resolver
オプションを指定します。
CALL dbms_java.loadjava('... options...', 'resolver_options');
-thin
、-oci
、-user
および-password
の各オプションはデータベース接続に関連しているため、指定しないでください。出力は、System.err
に送られます。通常、出力はトレース・ファイルに保存されますが、リダイレクトできます。
PROCEDURE dropjava(options VARCHAR2)
このプロシージャを使用すると、dropjava
コマンドライン・ツールではなく、コールを使用して、データベース内のクラスを削除できます。このプロシージャは、次のように、使用しているJavaアプリケーション内でコールできます。
CALL dbms_java.dropjava('... options...');
PROCEDURE grant_permission(grantee VARCHAR2, permission_type VARCHAR2, permission_name VARCHAR2, permission_action VARCHAR2)
このメソッドを使用すると、特定のユーザーまたはロールにパーミッションを付与できます。
PROCEDURE grant_permission(grantee VARCHAR2, permission_type VARCHAR2, permission_name VARCHAR2, permission_action VARCHAR2, key OUT NUMBER)
このメソッドを使用すると、特定のユーザーまたはロールにパーミッションを付与できます。キーは、ファイングレイン・アクセス・コントロールに使用できます。
PROCEDURE restrict_permission(grantee VARCHAR2, permission_type VARCHAR2, permission_name VARCHAR2, permission_action VARCHAR2)
このメソッドを使用すると、一般的な規則に対する制限または例外を指定できます。
PROCEDURE restrict_permission(grantee VARCHAR2, permission_type VARCHAR2, permission_name VARCHAR2, permission_action VARCHAR2, key OUT NUMBER)
このメソッドを使用すると、一般的な規則に対する制限または例外を指定できます。キーは、ファイングレイン・アクセス・コントロールに使用できます。
PROCEDURE grant_policy_permission(grantee VARCHAR2, permission_schema VARCHAR2, permission_type VARCHAR2, permission_name VARCHAR2)
このメソッドを使用すると、PolicyTablePermission
を付与および制限できます。
PROCEDURE grant_policy_permission(grantee VARCHAR2, permission_schema VARCHAR2, permission_type VARCHAR2, permission_name VARCHAR2, key OUT NUMBER)
このメソッドを使用すると、PolicyTablePermission
を付与および制限できます。キーは、ファイングレイン・アクセス・コントロールに使用できます。
PROCEDURE revoke_permission(permission_schema VARCHAR2, permission_type VARCHAR2, permission_name VARCHAR2, permission_action VARCHAR2)
このメソッドを使用すると、付与されたパーミッションを使用禁止にできます。
procedure set_preference(user VARCHAR2, type VARCHAR2, abspath VARCHAR2, key VARCHAR2, value VARCHAR2)
このプロシージャでは、次のように、SYS:java$prefs$
表内の行の挿入または更新が行われます。
CALL dbms_java.set_preference('SCOTT', 'U', '/my/package/method/three', 'windowsize', '22:32');
user
パラメータには、設定項目の連結先スキーマの名前を指定します。ログイン・スキーマがSYS
ではない場合、user
には、現在のログイン・スキーマを指定する必要があり、指定しないと、INSERT
に失敗します。type
パラメータには、ユーザー設定項目を示す値U
を指定するか、またはシステム設定項目を示すS
を指定できます。abspath
パラメータには、設定項目の絶対パスを指定します。key
は参照に使用する設定項目キー、value
は設定項目キーの値です。
FUNCTION runjava(cmdline VARCHAR2) RETURN VARCHAR2;
このファンクションは、唯一の引数としてJavaコマンドラインを取り、Oracle JVMでこれを実行します。
FUNCTION runjava_in_current_session(cmdline VARCHAR2) RETURN VARCHAR2;
このファンクションは、現在のコマンドラインを実行する前に、以前にJavaを使用したときからセッションに残っているJavaの状態を消去しない点を除き、runjava
ファンクションと同じです。
FUNCTION set_property(name VARCHAR2, value VARCHAR2) RETURN VARCHAR2;
このファンクションでは、Javaセッションが初期化されると、RDBMSの現行セッションの期間に使用されるシステム・プロパティの値を設定します。
データベース関連の例外が発生した場合、set_property
ファンクションの戻り値は、メッセージの形式の例外が含まれるVARCHAR
です。これにより、戻す前のデータベース・エラーとしてのファンクションの終了を回避できます。エラーがない場合、ファンクションの戻り値はnull
です。
注意: SET_PROPERTY ファンクションを実行するには、ユーザーはプロパティ名のSYS:java.util.PropertyPermission に対する書込みパーミッションを保持する必要があります。このパーミッションを付与するには、次のコマンドを使用します。
call dbms_java.grant_permission( '<user_name>', 'SYS:java.util.PropertyPermission', '<property_name>', 'write' ); |
FUNCTION get_property(name VARCHAR2) RETURN VARCHAR2;
このファンクションは、set_property
で以前に設定された値を戻します。
FUNCTION remove_property(name VARCHAR2) RETURN VARCHAR2;
このファンクションは、set_property
で以前に設定された値を削除します。
注意: remove_property ファンクションを実行するには、ユーザーはプロパティ名のSYS:java.util.PropertyPermission に対する書込みパーミッションを保持する必要があります。このパーミッションを付与するには、次のコマンドを使用します。
call dbms_java.grant_permission( '<user_name>', 'SYS:java.util.PropertyPermission', '<property_name>', 'write' ); |
FUNCTION show_property(name VARCHAR2) RETURN VARCHAR2;
このファンクションは、nameがNULLの場合、入力名または設定されたすべてのプロパティのバインディングについて、name = value
という形式のメッセージを表示します。
FUNCTION set_output_to_sql (id VARCHAR2, stmt VARCHAR2, bindings VARCHAR2, no_newline_stmt VARCHAR2 default null, no_newline_bindings VARCHAR2 default null, newline_only_stmt VARCHAR2 default null, newline_only_bindings VARCHAR2 default null, maximum_line_segment_length NUMBER default 0, allow_replace NUMBER default 1, from_stdout NUMBER default 1, from_stderr NUMBER default 1, include_newlines NUMBER default 0, eager NUMBER default 0) return VARCHAR2;
set_output_to_sql
は、SQL文の実行命令を構成する指定の出力仕様を定義します。これを行うのは出力がデフォルトの
System.out
およびSystem.err
ストリームを対象として発生する場合です。
FUNCTION remove_output_to_sql (id VARCHAR2) return VARCHAR2;
remove_output_to_sql
は、set_output_to_sql
で作成された仕様を削除します。
FUNCTION enable_output_to_sql (id VARCHAR2) return VARCHAR2;
enable_output_to_sql
は、set_output_to_sql
で作成された後、disable_output_to_sql
で無効化された仕様を再度有効にします。
FUNCTION disable_output_to_sql (id VARCHAR2) return VARCHAR2;
disable_output_to_sql
は、set_output_to_sql
で作成された仕様を無効にします。
FUNCTION query_output_to_sql (id VARCHAR2) return VARCHAR2;
query_output_to_sql
は、set_output_to_sql
で作成された仕様を説明するメッセージを戻します。
FUNCTION set_output_to_java (id VARCHAR2, class_name VARCHAR2, class_schema VARCHAR2, method VARCHAR2, bindings VARCHAR2, no_newline_method VARCHAR2 default null, no_newline_bindings VARCHAR2 default null, newline_only_method VARCHAR2 default null, newline_only_bindings VARCHAR2 default null, maximum_line_segment_length NUMBER default 0, allow_replace NUMBER default 1, from_stdout NUMBER default 1, from_stderr NUMBER default 1, include_newlines NUMBER default 0, eager NUMBER default 0, initialization_statement VARCHAR2 default null, finalization_statement VARCHAR2 default null)return VARCHAR2;
set_output_to_java
は、デフォルトのSystem.out
およびSystem.err
への出力ストリームが発生すると、Javaメソッドを実行する命令を構成する指定の出力仕様を定義します。
FUNCTION remove_output_to_java (id VARCHAR2) return VARCHAR2;
remove_output_to_java
は、set_output_to_java
で作成された仕様を削除します。
FUNCTION enable_output_to_java (id VARCHAR2) return VARCHAR2;
enable_output_to_java
は、set_output_to_java
で作成された後、disable_output_to_java
で無効化された仕様を再度有効にします。
FUNCTION disable_output_to_java (id VARCHAR2) return VARCHAR2;
disable_output_to_java
は、set_output_to_java
で作成された仕様を無効にします。
FUNCTION query_output_to_java (id VARCHAR2) return VARCHAR2;
query_output_to_java
は、set_output_to_java
で作成された仕様を説明するメッセージを戻します。
FUNCTION set_output_to_file (id VARCHAR2, file_path VARCHAR2, allow_replace NUMBER default 1, from_stdout NUMBER default 1, from_stderr NUMBER default 1) return VARCHAR2;
set_output_to_file
は、出力を捕捉する命令を構成する指定の出力仕様を定義します。出力が送信される対象はデフォルトのSystem.out
および
System.err
ストリームで、その出力を特定のファイルに追加します。
FUNCTION remove_output_to_file (id VARCHAR2) return VARCHAR2;
remove_output_to_file
は、set_output_to_file
で作成された仕様を削除します。
FUNCTION enable_output_to_file (id VARCHAR2) return VARCHAR2;
enable_output_to_file
は、set_output_to_file
で作成された後、disable_output_to_file
で無効化された仕様を再度有効にします。
FUNCTION disable_output_to_file (id VARCHAR2) return VARCHAR2;
disable_output_to_file
は、set_output_to_file
で作成された仕様を無効にします。
FUNCTION query_output_to_file (id VARCHAR2) return VARCHAR2;
query_output_to_file
は、set_output_to_file
で作成された仕様を説明するメッセージを戻します。
PROCEDURE enable_output_to_trc;
このプロシージャは、disable_output_to_trc
プロシージャが無効にした.trc
ファイルへのSystem.out
およびSystem.err
の出力を再び有効にします。
PROCEDURE disable_output_to_trc;
このプロシージャは、System.out
およびSystem.err
の出力が.trc
ファイルに表示されないようにします。
FUNCTION query_output_to_trc return VARCHAR2;
このファンクションは、System.out
およびSystem.err
の.trc
ファイルへの出力が現在有効になっているかどうかを表示する値を戻します。
FUNCTION endsession RETURN VARCHAR2;
このファンクションは、以前にJavaを実行したときからRDBMS現行セッションに残っているJavaセッションの状態をすべて消去します。
FUNCTION endsession_and_related_state RETURN VARCHAR2;
このファンクションは、以前にJavaを実行したときからRDBMS現行セッションに残っているJavaセッションの状態と、Javaの実行に関連するサポート・データをすべて消去します。
PROCEDURE set_native_compiler_option(optionName VARCHAR2, value VARCHAR2);
このプロシージャは、ネイティブ・コンパイラのオプションを現行スキーマの指定の値に設定します。
PROCEDURE unset_native_compiler_option(optionName VARCHAR2, value VARCHAR2);
このプロシージャは、現行スキーマについて、ネイティブ・コンパイラのオプション/値のペアの設定を解除します。
FUNCTION compile_class(classname VARCHAR2) return NUMBER;
このファンクションは、現行スキーマのclassnameで特定されるクラスで定義されたすべてのメソッドをコンパイルします。
FUNCTION uncompile_class(classname VARCHAR2, permanentp NUMBER default 0) return NUMBER;
このファンクションは、現行スキーマのclassnameで特定されるクラスで定義されたすべてのメソッドをアンコンパイルします。
FUNCTION compile_method(classname VARCHAR2, methodname VARCHAR2, methodsig VARCHAR2) return NUMBER;
このファンクションは、現行スキーマのclassnameで特定されるクラスで定義されたnameおよびJava typeシグネチャで指定したメソッドをコンパイルします。
FUNCTION uncompile_method(classname VARCHAR2, methodname VARCHAR2, methodsig VARCHAR2, permanentp NUMBER default 0) return NUMBER;
このファンクションは、現行スキーマのclassnameで特定されるクラスで定義されたnameおよびJava typeシグネチャで指定したメソッドをアンコンパイルします。
procedure start_jmx_agent(port VARCHAR2 default NULL, ssl VARCHAR2 default NULL, auth VARCHAR2 default NULL);
このプロシージャは、特定のセッションでJMXエージェントを開始します。通常、エージェントはセッションの期間内はアクティブのままです。
procedure set_runtime_exec_credentials(dbuser varchar2, osuser varchar2, ospass varchar2);
dbuser
はデータベース・ユーザー名またはスキーマ名で、osuser
、ospass
はOSアカウント資格証明です。
データベース・ユーザー/スキーマdbuser
を、オペレーティング・システム(OS)資格証明のペアosuser/ospass
と関連付けます。この関連付けは暗号化されて、SYS
ユーザーが所有する表に格納されます。新しい有効な関連付けが確立された後は、java.lang.Runtime.exec
メソッドによって分岐された新しいOSプロセスや、dbuser
がOSコマンドを実行するために起動されたProceessBuilder
はいずれも、OracleプロセスのOS IDとしてでなくUID osuser
として実行されます。つまり、分岐したプロセスのUIDビットはUID osuser
に設定されます。
注意: DBAおよびセキュリティ管理者は、このプロシージャを使用して、Oracle DatabaseにデプロイされたJavaアプリケーションのセキュリティを強化します。DBAは、より権限の小さいアカウントを指定することによって、生成されるプロセスの権限およびアクセス権を適宜制限できます。set_runtime_exec_credentials プロシージャを使用するには、SYS ユーザーである必要があり、そうでない場合は「ORA-01031: 権限が不足しています」 エラーが発生します。無効なアカウント資格証明を使用すると、新しいプロセスの作成時にIOException が発生します。 |
このプロシージャの使用方法の例を次に示します。
例1
次のコマンドは、ユーザー/スキーマDBUSER
を資格証明osuser
/ospass
にバインドします。
dbms_java.set_runtime_exec_credentials('DBUSER', 'osuser', 'ospass');
例2
次のいずれかのコマンドは、DBUSER
と資格証明osuser
/ospass
の関連付けをアンバインドします。
dbms_java.set_runtime_exec_credentials('DBUSER', '', '');
dbms_java.set_runtime_exec_credentials('DBUSER', null, null);
注意: set_runtime_exec_credentials プロシージャを使用するには、Oracleのjssu 機能を構成して、Oracle製品のインストール時にUID root を設定する必要があり、そうしない場合はプロセスの作成時にprocess spawn via jssu failed... というIOExceptionが発生する可能性があります。 |