CREATE PROCEDURE 文 CREATE PROCEDURE statementSQL statementsCREATE PROCEDUREprocedurescreating

CREATE PROCEDURE文によりCALL PROCEDUREで実行可能な、Javaの手続きを作成できます。

手続きやデータベースの所有者は自動的にEXECUTE権限を持つものとされ、また他のユーザに権限を付与することができます。EXECUTE権限は手続きやデータベースの所有者から剥奪できません。

構文CREATE PROCEDURE 手続名 ( [ 手続きの引数 [, 手続きの引数] ] * ) [ 手続きの要素 ] * 手続名[ スキーマ名. ] SQL92識別子

スキーマ名が指定されなかった場合、現在のスキーマが既定となります。手続名を限定する場合、スキーマ名はSYSで始まってはなりません。

手続の引数[ { IN | OUT | INOUT } ] [ 引数名 ] データ型

引数の既定はINです。引数名は手続にて一意である必要があります。

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

BLOB、CLOB、LONG VARCHAR、LONG VARCHAR FOR BIT DATAやXMLのようなデータ型はCREATE PROCEDURE文にて引数と定義できません。
手続の要素 { | [ DYNAMIC ] RESULT SETS INTEGER | LANGUAGE { JAVA } | EXTERNAL NAME string | PARAMETER STYLE JAVA | { NO SQL | MODIFIES SQL DATA | CONTAINS SQL | READS SQL DATA } }
DYNAMIC RESULT SETS <i>数値</i>

手続に見積もられる結果の上限を与えます。既定は結果無し(0)です。

LANGUAGE

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

EXTERNAL NAME <i>文字列</i>

文字列 により手続が実施されたときのJavaのメソッドが記述されます。これは次の書式となります。クラス名.メソッド名この名前には空白があってはなりません。

PARAMETER STYLE

JAVA - 手続はJavaとSQLルーチンの仕様に沿って、値渡しにより引数を扱います。INOUTおよびOUTの引数は値を呼び出し側に戻せるように、要素を一つだけ持つ配列により渡されます。結果はJavaのメソッドにjava.sql.ResultSet[]の型で追加された、唯一つの要素を持つパラメータにより呼び出し側に戻されます。

は長い列の型(例えばLong Varchar, BLOB等のことです。)をサポートしません。 もしこれらの長い列の型のうちの一つを使うと例外が発生します。

NO SQL, CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA

手続がSQL文を発行するか否か、またするならばどのようなSQL文を発行するかを表します。

CONTAINS SQL
読み込みも変更も行わないSQL文を手続に持たせることができることを表します。サポートされていない文では異なるというエラーが発生します。これは既定です。
NO SQL
手続ではいかなるSQL文も実行できません。
READS SQL DATA
変更を行わないSQL文を手続に持たせることができることをあらわします。サポートされていない文では異なるというエラーが発生します。
MODIFIES SQL DATA
手続でサポートされていない、あらゆるSQL文を手続から実行できることを表します。

手続の要素はどのような順序でも出現することができますが、それぞれの種類の要素は一度までしか現れてはなりません。手続にはこれらの定義が無ければなりません。

  • LANGUAGE
  • PARAMETER STYLE
  • EXTERNAL NAME

CREATE PROCEDURE SALES.TOTAL_REVENUE(IN S_MONTH INTEGER, IN S_YEAR INTEGER, OUT TOTAL DECIMAL(10,2)) PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME 'com.acme.sales.calculateRevenueByMonth'