CREATE PROCEDURE文によりCALL PROCEDUREで実行可能な、Javaの手続きを作成できます。
手続きやデータベースの所有者は自動的にEXECUTE権限を持つものとされ、また他のユーザに権限を付与することができます。EXECUTE権限は手続きやデータベースの所有者から剥奪できません。
スキーマ名が指定されなかった場合、現在のスキーマが既定となります。手続名を限定する場合、スキーマ名はSYSで始まってはなりません。
引数の既定はINです。引数名は手続にて一意である必要があります。
データ型の構文はデータ型に記述されています。
{ | [ DYNAMIC ] RESULT SETS INTEGER | LANGUAGE { JAVA } | EXTERNAL NAME string | PARAMETER STYLE JAVA | { NO SQL | MODIFIES SQL DATA | CONTAINS SQL | READS SQL DATA } }
手続に見積もられる結果の上限を与えます。既定は結果無し(0)です。
JAVA- 手続はJavaのクラスにあるpublic staticなメソッドとして呼ばれます。
クラス名.メソッド名この名前には空白があってはなりません。
JAVA - 手続はJavaとSQLルーチンの仕様に沿って、値渡しにより引数を扱います。INOUTおよびOUTの引数は値を呼び出し側に戻せるように、要素を一つだけ持つ配列により渡されます。結果はJavaのメソッドにjava.sql.ResultSet[]の型で追加された、唯一つの要素を持つパラメータにより呼び出し側に戻されます。
Derby は長い列の型(例えばLong Varchar, BLOB等のことです。)をサポートしません。 もしこれらの長い列の型のうちの一つを使うと例外が発生します。
手続がSQL文を発行するか否か、またするならばどのようなSQL文を発行するかを表します。
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'