1.10.1 外部Javaルーチン
この項では,外部Javaルーチンに関連する次の項目について説明します。
-
外部Javaルーチン名
-
型マッピング
-
結果集合返却機能
なお,AIXの場合は,POSIXライブラリ版のHiRDBをセットアップ(pdsetupコマンドを実行)していないとき,又はPOSIXライブラリ版のHiRDBから非POSIXライブラリ版のHiRDBに再セットアップしたときは,外部Javaルーチンを使用できません。pdsetupコマンドについては,マニュアル「HiRDB コマンドリファレンス」を参照してください。
(1) 外部Javaルーチン名
外部Javaルーチン名は,CREATE PROCEDURE及びCREATE FUNCTIONで指定できます。外部Java手続き及び外部Java関数を,外部ルーチンとして定義するためです。
(a) 形式
外部Javaルーチン名::='JARファイル名:Javaメソッド名〔Javaシグネチャ〕' Javaメソッド名::=Javaクラス名.メソッド識別子 Javaクラス名::=〔パッケージ名.〕クラス識別子 Javaシグネチャ::=(〔Javaパラメタ〕)〔returns 型名〕 Javaパラメタ::=型名〔,型名〕…
(b) 説明
- JARファイル名
-
Javaで定義したクラス又はパッケージの集合である,アーカイブファイルの名称を指定します。
JARファイル名は,パス名で指定しないでください。JARファイル名は,最大255バイトで指定できます。
- メソッド識別子
-
実際に処理が記述されているJavaメソッドの識別子を指定します。
メソッド識別子は,最大255バイトで指定できます。
- パッケージ名
-
Javaで定義したクラスの集合である,パッケージの名称を指定します。
- クラス識別子
-
Javaメソッドが定義されているクラスの識別子を指定します。
パッケージ名と合わせて,最大255バイトで指定できます。
- returns 型名
-
Javaメソッドの引数及び戻り値に対応するJavaの型名を指定します。
外部Java手続きを定義する場合は,戻り値の型名をvoid(戻り値なし)にするか,"returns 型名"を省略してください。
外部Java関数を定義する場合は,"returns 型名"を必ず指定してください。ただし,Javaシグネチャを省略する場合は"returns 型名"を指定する必要はありません。なお,外部Java関数では戻り値の型名にvoid(戻り値なし)は指定できません。
- 型名〔,型名〕…
-
Javaメソッドの引数及び戻り値に対応するJavaの型名を指定します。
規則を次に示します。
-
Javaパラメタで記述するJavaメソッドのパラメタの型名は,CREATE PROCEDURE及びCREATE FUNCTIONで指定したSQLパラメタ名の順番に記述してください。
-
SQLパラメタ名に対応するJavaメソッドのパラメタの型名をすべて記述してください。
-
CREATE PROCEDUREのDYNAMIC RESULT SETS句で結果集合の最大数を1以上にした場合,指定した結果集合の最大個数以下の型名"java.sql.ResultSet[]"を,Javaパラメタの最後に指定してください。
-
CREATE FUNCTIONで関数を定義する場合は,HiRDBのデータ型とマッピングできるJavaデータ型を指定します。
CREATE PROCEDUREで定義する手続きでSQLパラメタの入出力モードがINの場合は,HiRDBのデータ型とマッピングできるJavaデータ型を指定します。
CREATE PROCEDUREで定義する手続きでSQLパラメタの入出力モードがOUT又はINOUTの場合は,HiRDBのデータ型とマッピングできるJavaデータ型の一次元の配列型を指定します。
例えば,INTEGERやBLOBの出力パラメタに対しては,java.lang.Integer[]やbyte[] []で指定します。なお,HiRDBのデータ型とマッピングできるJavaデータ型については,「型マッピング」を参照してください。
-
(c) 規則
-
Javaシグネチャを省略すると,外部Java手続き又は外部Java関数定義で指定しているHiRDBのデータ型と,SQLパラメタの入出力モードを基に,次に示す規則でJavaデータ型が決定されます。
-
CREATE FUNCTIONで関数を定義する場合,Javaメソッドのデータ型はマッピング規則に従って決定されます。
-
CREATE PROCEDUREで定義する手続きのSQLパラメタの入出力モードがINの場合,Javaメソッドのデータ型はマッピング規則に従って決定されます。
-
CREATE PROCEDUREで定義する手続きのSQLパラメタの入出力モードがOUT又はINOUTの場合,Javaメソッドのデータ型はマッピング規則の一次元の配列型で決定されます。
-
CREATE PROCEDUREのDYNAMIC RESULT SETS句で結果集合の最大数を1以上指定してJavaシグネチャを省略した場合は,マッピング規則で決定したデータ型から更に,java.sql.ResultSet[]型のパラメタが,Javaメソッドのパラメタとして結果集合の最大個数分追加されます。
例えば,INTEGERやBLOBの出力パラメタに対しては,java.lang.Integer[]やbyte[] []が決定されます。なお,マッピング規則については,「型マッピング」を参照してください。
-
-
外部ルーチン名は,必ずアポストロフィ(’)で囲んでください。
-
外部ルーチン名で指定できるJavaメソッドは,クラス定義のstaticで宣言したクラスメソッドだけです。
-
各項目に指定できる文字を次に示します。
-
JARファイル名
アルファベットの大文字と小文字,数字,'_'(アンダースコア),'$','.','-'
-
クラス識別子,メソッド識別子,型名
アルファベットの大文字と小文字,数字,'_'(アンダースコア),'$'
-
パッケージ名
アルファベットの大文字と小文字,数字,'_'(アンダースコア),'$','.'
-
-
パッケージ名,クラス識別子,メソッド識別子,及び型名の先頭一文字には数字を指定できません。
-
パッケージ名を省略した型名を記述する場合,HiRDBは次のようにパッケージ名を含む型名として解釈します。
省略した場合の記述形式
HiRDBが解釈するパッケージ名を含む型名
Integer
java.lang.Integer
Short
java.lang.Short
BigDecimal
java.math.BigDecimal
Double
java.lang.Double
Float
java.lang.Float
String
java.lang.String
Date
java.sql.Date
Time
java.sql.Time
Timestamp
java.sql.Timestamp
ResultSet
java.sql.ResultSet
(2) 型マッピング
ここでは,Java言語で扱われるデータ型と,HiRDBで扱うデータ型のマッピングについて説明します。
外部ルーチン指定のJavaシグネチャを省略した場合の暗黙的マッピングを次の表に示します。
HiRDBのデータ型 |
Javaデータ型(NULL値可) |
---|---|
INT〔EGER〕 |
java.lang.Integer |
SMALLINT |
java.lang.Short |
〔LARGE〕 DEC〔IMAL〕 |
java.math.BigDecimal |
FLOAT, DOUBLE PRECISION |
java.lang.Double |
SMALLFLT, REAL |
java.lang.Float |
CHAR〔ACTER〕 |
java.lang.String |
VARCHAR(n), CHAR〔ACTER〕 VARYING |
|
NCHAR, NATIONAL CHAR〔ACTER〕 |
|
NVARCHAR, NATIONAL CHAR〔ACTER〕, NCHAR VARYING |
|
MCHAR |
|
MVARCHAR |
|
DATE |
java.sql.Date |
TIME |
java.sql.Time |
TIMESTAMP |
java.sql.Timestamp |
INTERVAL YEAR TO DAY |
java.math.BigDecimal |
INTERVAL HOUR TO SECOND |
|
BLOB, BINARY LARGE OBJECT |
byte[] |
BINARY |
外部ルーチン指定のJavaシグネチャで指定できるJavaデータ型とHiRDBのデータ型のマッピングを次の表に示します。
HiRDBのデータ型 |
Javaデータ型 (NULL値可) |
Javaデータ型 (NULL値不可)※1 |
---|---|---|
INT〔EGER〕 |
java.lang.Integer |
int |
SMALLINT |
java.lang.Short |
short |
〔LARGE〕 DEC〔IMAL〕 |
java.math.BigDecimal |
− |
FLOAT,又は DOUBLE PRECISION |
java.lang.Double |
double |
SMALLFLT,又は REAL |
java.lang.Float |
float |
CHAR〔ACTER〕 |
java.lang.String,又は byte[]※2 |
−※3 |
VARCHAR(n),又は CHAR〔ACTER〕 VARYING |
||
NCHAR,又は NATIONAL CHAR〔ACTER〕 |
||
NVARCHAR, NATIONAL CHAR〔ACTER〕,又は NCHAR VARYING |
||
MCHAR |
||
MVARCHAR |
||
DATE |
java.sql.Date |
− |
TIME |
java.sql.Time |
|
TIMESTAMP |
java.sql.Timestamp |
|
INTERVAL YEAR TO DAY |
java.math.BigDecimal |
|
INTERVAL HOUR TO SECOND |
||
BLOB,又は BINARY LARGE OBJECT |
byte[] |
|
BINARY |
||
抽象データ型 |
− |
- (凡例)
-
−:Java言語に対応するデータ型がないことを示します。
- 注※1
-
NULL値を設定すると,実行時にエラーになります。
- 注※2
-
HiRDBの文字列データ型に対応するJavaデータ型として,java.lang.String又はbyte[]のどちらかを指定できます。byte[]を指定した場合,文字コード変換はされません。
- 注※3
-
HiRDBと外部Javaルーチンの間で,日本語データをStringクラス及びそれを継承したクラスを介して受け渡す場合,Javaの文字コードのマッピング規則(該当する文字コードとUnicode)によって,外字コードは正しく変換されないので注意してください。
(3) 非POSIXライブラリ版のHiRDBでのSQL実行可否(AIX版限定)
非POSIXライブラリ版のHiRDBでのSQL実行可否を次の表に示します。非POSIXライブラリ版のHiRDBとは,AIXの場合に,pdsetupコマンドでPOSIXライブラリ版のロードモジュールをセットアップしていないHiRDBのことをいいます。
分類 |
SQL文 |
実行可否 |
実行できない条件 |
---|---|---|---|
定義系SQL |
ALTER PROCEDURE |
△ |
外部Java手続きの指定 |
ALTER ROUTINE |
△ |
外部Java手続き及び外部Java関数の指定 |
|
CREATE FUNCTION |
△ |
外部Javaルーチンの使用 |
|
CREATE PROCEDURE |
△ |
外部Javaルーチンの使用 |
|
CREATE TYPE |
△ |
外部Javaルーチンの使用 |
|
CREATE VIEW |
△ |
外部Java関数の指定 |
|
DROP FUNCTION |
○ |
− |
|
DROP PROCEDURE |
○ |
− |
|
DROP SCHEMA |
○ |
− |
|
操作系SQL |
ASSIGN LIST文 |
○ |
− |
CALL文 |
△ |
|
|
DELETE文 |
○ |
− |
|
DROP LIST文 |
○ |
− |
|
FREE LOCATOR文 |
○ |
− |
|
INSERT文 |
△ |
外部Java関数の使用 |
|
PURGE TABLE文 |
○ |
− |
|
1行SELECT文 |
△ |
外部Java関数の使用 |
|
動的SELECT文 |
△ |
外部Java関数の使用 |
|
UPDATE文 |
△ |
外部Java関数の使用 |
|
代入文 |
△ |
外部Java関数の使用 |
|
制御系SQL |
LOCK文 |
○ |
− |
埋込みSQL言語 |
INSTALL JAR |
× |
− |
REPLACE JAR |
× |
− |
|
REMOVE JAR |
○ |
− |
|
INSTALL CLIB |
○ |
− |
|
REPLACE CLIB |
○ |
− |
|
REMOVE CLIB |
○ |
− |
|
その他 |
関数呼出し |
△ |
|
- (凡例)
-
○:実行できます。
△:条件によってはエラーとなります。
×:実行できません。
−:該当しません。