Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


1.10.1 外部Javaルーチン

この項では,外部Javaルーチンに関連する次の項目について説明します。

なお,HP-UX,及び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の型名を指定します。

規則を次に示します。

  1. Javaパラメタで記述するJavaメソッドのパラメタの型名は,CREATE PROCEDURE及びCREATE FUNCTIONで指定したSQLパラメタ名の順番に記述してください。

  2. SQLパラメタ名に対応するJavaメソッドのパラメタの型名をすべて記述してください。

  3. CREATE PROCEDUREのDYNAMIC RESULT SETS句で結果集合の最大数を1以上にした場合,指定した結果集合の最大個数以下の型名"java.sql.ResultSet[]"を,Javaパラメタの最後に指定してください。

  4. 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) 規則

  1. 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[] []が決定されます。なお,マッピング規則については,「型マッピング」を参照してください。

  2. 外部ルーチン名は,必ずアポストロフィ(’)で囲んでください。

  3. 外部ルーチン名で指定できるJavaメソッドは,クラス定義のstaticで宣言したクラスメソッドだけです。

  4. 各項目に指定できる文字を次に示します。

    • JARファイル名

      アルファベットの大文字と小文字,数字,'_'(アンダースコア),'$','.','-'

    • クラス識別子,メソッド識別子,型名

      アルファベットの大文字と小文字,数字,'_'(アンダースコア),'$'

    • パッケージ名

      アルファベットの大文字と小文字,数字,'_'(アンダースコア),'$','.'

  5. パッケージ名,クラス識別子,メソッド識別子,及び型名の先頭一文字には数字を指定できません。

  6. パッケージ名を省略した型名を記述する場合,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シグネチャを省略した場合の暗黙的マッピングを次の表に示します。

表1‒27 外部ルーチン指定の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のデータ型のマッピングを次の表に示します。

表1‒28 外部ルーチン指定の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実行可否(UNIX版限定)

非POSIXライブラリ版のHiRDBでのSQL実行可否を次の表に示します。非POSIXライブラリ版のHiRDBとは,HP-UX版,及びAIX版の場合に,pdsetupコマンドでPOSIXライブラリ版のロードモジュールをセットアップしていないHiRDBのことをいいます。

表1‒29 非POSIXライブラリ版のHiRDBでのSQL実行可否

分類

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文

  • 外部Java手続き

  • 外部Javaルーチンを使う手続き

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

その他

関数呼出し

  • 外部Java関数の呼び出し

  • 外部Java関数を使う関数

(凡例)

○:実行できます。

△:条件によってはエラーとなります。

×:実行できません。

−:該当しません。