外部ストアド プロシージャのJavaメソッドのパラメータのリストは、外部プロシージャがCALL文に現われるIN、OUT、およびINOUTの各パラメータを含みます。
外部プロシージャには、0~255の入出力パラメータを指定できます。
入出力パラメータとして使用するJavaデータ型は、プロシージャ定義(CREATE PROCEDUREまたはREPLACE PROCEDURE)と呼び出し(CALL)のSQLデータ型にマッピングされます。
概要
public class class_name { ... public static void method_name ( type_1 *in_out_parameter_1, ..., type_n *in_out_parameter_n ) { ... } }
説明
パラメータ | 指定内容 |
---|---|
type_n * in_out_parameter_n | IN、OUT、またはINOUT引数に対応する入出力パラメータ。nはCREATE PROCEDURE定義内のパラメータの数です。n=0なら、入出力パラメータはありません。型は、Javaプリミティブか、IN、OUT、またはINOUT引数のSQLデータ型に対応するクラスです。 入出力パラメータの数は最大255個です。 |
パラメータ型のデフォルト マッピング規則
Javaメソッドのパラメータ リストで使用されるデータ型は、CREATE PROCEDUREまたはREPLACE PROCEDURE文のパラメータ リストではSQLデータ型にマッピングされます。
次のようなCREATE PROCEDURE文があるとします。
CREATE PROCEDURE NewRegionXSP (IN regionID INTEGER) LANGUAGE JAVA NO SQL PARAMETER STYLE JAVA EXTERNAL NAME 'JarXSP:region.newRegion';
このパラメータ リストでは、regionIDのSQLデータ型はINTEGERと指定されています。外部ストアド プロシージャを実装するnewRegionメソッドのシグネチャは次のようになります。
public static void newRegion( int regionID ) { ... }
デフォルトのマッピング規則は単純なマッピングで、SQLデータ型がJavaプリミティブにマッピングされます。SQLデータ型に適切にマッピングできるJavaプリミティブが無い場合は、デフォルトのマッピング規則はオブジェクト マッピングになり、SQLデータ型がJavaクラスにマッピングされます。
CHARACTER(30)の値を取るNewRegionXSP外部ストアド プロシージャを見てみましょう。
CREATE PROCEDURE NewRegionXSP (IN regionID CHAR(30)) LANGUAGE JAVA NO SQL PARAMETER STYLE JAVA EXTERNAL NAME 'JarXSP:region.newRegion';
CHARACTER型は的確にJavaプリミティブにマッピングできないため、CHARACTER型はjava.lang.Stringにマッピングされます。外部ストアド プロシージャを実装するnewRegionメソッドのシグネチャは次のようになります。
public static void newRegion( String regionID ) { ... }
SQLデータ型がJavaデータ型にマッピングされる仕組みについては、SQLデータ型のマッピングを参照してください。
パラメータのデフォルト マッピングの上書き
パラメータがNULLを渡したり戻すことができる外部ストアド プロシージャでは、NULLを表現できないため、Javaプリミティブに単純にマッピングすることはお勧めできません。
デフォルトのマッピングを上書きするには、CREATE PROCEDURE文またはREPLACE PROCEDURE文のEXTERNAL NAME句で、Javaメソッドのパラメータ リスト内のマッピングを明示的に指定しなければなりません。
例: パラメータ型のデフォルト マッピングの使用
以下に、SQL INTEGER型のパラメータをJava intプリミティブにマッピングする外部ストアド プロシージャのJavaメソッドの実装方法を示すコードの一部を示します。
public class region { public static void newRegion( int[] regionID ) { regionID[0] += 1; } ... }
領域クラスのJARファイルがregion.jarを呼び出した場合、以下の文は、region.jarとregionクラスをデータベースに登録し、JARファイルに対してJarXSPと呼ばれるSQL識別子を作成します。
CALL SQLJ.INSTALL_JAR('CJ!C:\xspsrc\region.jar','JarXSP',0);
外部ストアド プロシージャを定義する、対応するCREATE PROCEDURE文は以下のようになります。
CREATE PROCEDURE NewRegionXSP (INOUT regionID INTEGER) LANGUAGE JAVA NO SQL PARAMETER STYLE JAVA EXTERNAL NAME 'JarXSP:region.newRegion';
例: パラメータ型のデフォルト マッピングの上書き
以下に、SQL INTEGER型のパラメータをjava.lang.Integerクラスにマッピングする外部ストアド プロシージャのJavaメソッドの実装方法を示すコードの一部を示します。
public class region { public static void newRegion( Integer[] regionID ) { if (regionID[0] != null) regionID[0] = regionID[0].intValue() + 1; } ... }
領域クラスのJARファイルがregion.jarを呼び出した場合、以下の文は、region.jarとregionクラスをデータベースに登録し、JARファイルに対してJarXSPと呼ばれるSQL識別子を作成します。
CALL SQLJ.INSTALL_JAR('CJ!C:\xspsrc\region.jar','JarXSP',0);
外部ストアド プロシージャを定義する、対応するCREATE PROCEDURE文は以下のようになります。
CREATE PROCEDURE NewRegionXSP (INOUT regionID INTEGER) LANGUAGE JAVA NO SQL PARAMETER STYLE JAVA EXTERNAL NAME 'JarXSP:region.newRegion(java.lang.Integer[])';
CLOBおよびBLOB型のマッピング
CREATE PROCEDURE文またはREPLACE PROCEDURE文のパラメータ リストのCLOBおよびBLOB SQL型は、java.sql.Clobクラスとjava.sql.Blobクラスにそれぞれマッピングされます。
CREATE PROCEDURE文またはREPLACE PROCEDURE文のデータ アクセス句は、使用されるjava.sql.Clobとjava.sql.Blobの実装クラスを決定します。データ アクセス句は、外部ストアド プロシージャがSQL文を実行できるかどうかを示します。実行できる場合は、この文がデータベースでSQLデータを読み込んだり変更するかどうかを示します。
SQL型 | データ アクセス句 | Javaの実装クラス |
---|---|---|
BLOB | NO SQL | com.teradata.fnc.Blob 詳細は、com.teradata.fnc.Blobを参照してください。 |
CONTAINS SQL | com.teradata.jdbc.jdbc_4.Blob 詳細は、Teradata JDBC Driverの参考文献(https://teradata-docs.s3.amazonaws.com/doc/connectivity/jdbc/reference/current/frameset.htmlから入手可能)を参照してください。 |
|
READS SQL DATA | ||
MODIFIES SQL DATA | ||
CLOB | NO SQL | com.teradata.fnc.Clob 詳細は、com.teradata.fnc.Clobを参照してください。 |
CONTAINS SQL | com.teradata.jdbc.jdbc_4.Clob 詳細は、Teradata JDBC Driverの参考文献(https://teradata-docs.s3.amazonaws.com/doc/connectivity/jdbc/reference/current/frameset.htmlから入手可能)を参照してください。 |
|
READS SQL DATA | ||
MODIFIES SQL DATA |
データ アクセス句の詳細については、Java外部ストアド プロシージャでのSQLの実行のプロシージャが実行するSQL文の型の制限を参照してください。