# 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 文
関連資料
CREATE INDEX 文
CREATE PROCEDURE 文
CREATE SCHEMA 文
CREATE SYNONYM 文
CREATE TABLE 文
CREATE TRIGGER 文
CREATE VIEW 文