CREATE FUNCTION 文

CREATE FUNCTION文により、式で利用できるJava関数を作成できます。

関数の所有者および、データベースの所有者は、自動的に関数へのEXECUTE権限を手に入れます。加えて、他のユーザへの権限付与の権限も手に入れます。関数とデータベースの所有者から、関数の実行権限を剥奪することはできません。

構文

CREATE FUNCTION 関数名 ( [ 関数の引数 
   [, FunctionParameter] ] * ) RETURNS 返却データ型 [ 関数の要素 ] *

関数名

[ スキーマ名. ] SQL92識別子

スキーマ名が与えられなかった場合、デフォルトは現在のスキーマとなります。限定された関数名にて、スキーマ名はSYSで始まってはなりません。

関数の引数

[ 引数名 ] データ型

引数名は関数にて一意である必要があります。

データ型の構文は、データ型に書かれています。

注: CREATE FUNCTION文のパラメータにできないデータ型があります。それは、BLOB、CLOB、LONG VARCHAR、LONG VARCHAR FOR BIT DATAやXML等です。

返却データ型

表型 | データ型

データ型の構文はデータ型に記述されています。

表型

TABLE( 列要素 [, 列要素 ]* )

表関数の返り値の型です。現在利用できるのはDerbyの表関数の形式のみです。 これらはJDBCのResultSetを返す関数です。 より詳細な情報は、Derby ディベロッパーズ ガイドに記述された「Derbyの表関数のプログラミング」を参照してください。

列要素

SQL92識別子 データ型

データ型の構文は、データ型に記述されています。

注: 表関数から返却する情報の列の型を、XMLとすることはできません。

関数の要素

 {
| LANGUAGE { JAVA }
| EXTERNAL NAME 文字列
| PARAMETER STYLE パラメータの種類
| { NO SQL | CONTAINS SQL | READS SQL DATA }
| { RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }
 }

LANGUAGE

JAVA- 関数はJavaのクラスにあるpublic staticなメソッドとして呼ばれます。

EXTERNAL NAME string

文字列により、関数が実行されたときに呼ばれるJavaのメソッドが記述されます。この文字列は次の書式です。
クラス名.メソッド名
これは空白を含んではなりません。

パラメータの種類

JAVA | DERBY_JDBC_RESULT_SET

関数はJava言語およびSQLルーチンの仕様に沿って、引数を値渡しします。INOUTとOUTの引数は変更後の値を返せるように、要素がひとつの配列として渡されます。さらに結果セットはJavaのメソッドのパラメータを経て、配列に渡したjava.sql.ResultSet[]型の要素により返すことができます。

Derby は長い列の型(これは例えばLong VarcharやBLOB等のことです。)をサポートしません。 これらの長い列の型を使おうとすると、エラーが発生します。

Derbyの表関数の場合、PARAMETER STYLEは常にDERBY_JDBC_RESULT_SETで、これ以外の値とすることはできません。表関数とは表型を返す関数で、JDBCのResultSetを返すメソッドに対応します。 それ以外の場合は、PARAMETER STYLEは常にJAVAです。

NO SQL, CONTAINS SQL, READS SQL DATA

により関数がSQLを発行するか否か。もしするならどのようなSQLを発行するかを記述します。

CONTAINS SQL
関数により変更も更新も行わないSQL文を実行できます。 関数にて許可されていない文が実行された場合、違うというエラーが返ります。
NO SQL
関数はSQLを実行できません。
READS SQL DATA
関数は情報の更新を行わないSQLを実行することができます。 関数にて許可されていない文が実行された場合、違うというエラーが返ります。 これは既定です。

RETURNS NULL ON NULL INPUT or CALLED ON NULL INPUT

入力の引数をnullにして関数が呼ばれるかをあらわします。その場合はnull値と扱います。
RETURNS NULL ON NULL INPUT
入力の引数のうちいずれかがnullであった場合、関数は呼ばれません。そのときの帰り値はnullとなります。
CALLED ON NULL INPUT
関数は入力の引数をnullにして呼ぶことができます。この場合は関数がnullの引数をとっても動作するようにコーディングされていなければなりません。関数はnullあるいはそれ以外の値を返すことができます。これは既定です。
関数の要素はどのような順序で現れてもかまいませんが、それぞれの要素は一回しか現れてはなりません。関数の定義にはこれらの要素が必要です。
  • LANGUAGE
  • PARAMETER STYLE
  • EXTERNAL NAME

Example

CREATE FUNCTION TO_DEGREES(RADIANS DOUBLE) RETURNS DOUBLE
PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
EXTERNAL NAME 'java.lang.Math.toDegrees'
関連資料
CREATE INDEX 文
CREATE PROCEDURE 文
CREATE SCHEMA 文
CREATE SYNONYM 文
CREATE TABLE 文
CREATE TRIGGER 文
CREATE VIEW 文