CREATE PROCEDURE 文

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 数値

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

LANGUAGE

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

EXTERNAL NAME 文字列

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

PARAMETER STYLE

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

Derby は長い列の型(例えば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'
関連資料
CREATE FUNCTION 文
CREATE INDEX 文
CREATE SCHEMA 文
CREATE SYNONYM 文
CREATE TABLE 文
CREATE TRIGGER 文
CREATE VIEW 文