17.00 - 17.05 - パラメータ リスト - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

外部ストアド プロシージャのJavaメソッドのパラメータのリストは、外部プロシージャがCALL文に現われるIN、OUT、およびINOUTの各パラメータを含みます。

外部プロシージャには、0~255の入出力パラメータを指定できます。

入出力パラメータとして使用するJavaデータ型は、プロシージャ定義(CREATE PROCEDUREまたはREPLACE PROCEDURE)と呼び出し(CALL)のSQLデータ型にマッピングされます。

Java外部プロシージャには、基本型が入れ子構造のUDTであるARRAY型パラメータを指定することはできません。

概要

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.jarregionクラスをデータベースに登録し、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.jarregionクラスをデータベースに登録し、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文の型の制限を参照してください。