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 UDFおよび外部ストアド プロシージャのパラメータに対してサポートされるSQLデータ型と、SQLデータ型がJavaデータ型にマッピングされる仕組みについて説明します。

デフォルトのパラメータ マッピング規則は単純です。つまり、SQLデータ型はJavaプリミティブ(単純マッピング)に、マッピングされます。適切なプリミティブが存在しない場合は、Javaクラス(オブジェクト マッピング)にマッピングされます。

パラメータがNULLを渡したり戻したりことができるUDFまたは外部ストアド プロシージャでは、Javaプリミティブに単純にマッピングすることは推奨できません。

一部の型には、複数のタイプのマッピングを使用できます。デフォルト マッピングは、追加のマッピングとともに識別されます。Java外部ルーチン作成者は、要件に応じてSQL型がマッピングされるJavaデータ型を選択できます。

デフォルトのマッピングを上書きするには、CREATE/REPLACE FUNCTION文またはCREATE/REPLACE PROCEDURE文のEXTERNAL NAME句で、Javaメソッドのパラメータ リスト内のマッピングを明示的に指定しなければなりません。

例: デフォルト マッピングを持つDISTINCT型UDT

この例では、EXTERNAL NAME句のJavaルーチン宣言にパラメータ リストは含まれません。そのため、単純なマッピング(デフォルト)がMyInt UDTに使用されます。

CREATE TYPE MYINT AS INTEGER FINAL;
REPLACE FUNCTION MyScore(A1 MYINT)
RETURNS MYINT
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.myScore';
対応するJavaメソッド:
public static int myScore(int a) throws SQLException

例: デフォルト以外のマッピングによるST_Geometry

この例では、ST_Geometryクラスへのデフォルト以外のマッピングを使用するST_Geometryパラメータを備えたJava UDFを示します。

REPLACE FUNCTION get_Geom(G1 ST_GEOMETRY)
RETURNS INTEGER
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.get_geom(com.teradata.fnc.ST_Geometry) returns int';
public static int get_geom(com.teradata.fnc.ST_Geometry g1)
   throws SQLException

ARRAY/VARRAY

ARRAY/VARRAY SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.sql.Array

com.teradata.fnc.Arrayクラスは、java.sql.Arrayインターフェースを実装します。

1-DとN-D配列の両方は、Javaの外部ストアド プロシージャおよびUDFのパラメータおよび戻り値の型としてサポートされます。

BIGINT

BIGINT SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
long (J) java.lang.Long
SQL関数定義の例(デフォルト マッピング、NULL値以外):
CREATE PROCEDURE F1 (IN A BIGINT, OUT B BIGINT)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(long a, long[] b)
{ ... }
SQL関数定義の例(NULL値使用可):
CREATE PROCEDURE F1 (IN A BIGINT, OUT B BIGINT)
LANGUAGE JAVA
 ...
EXTERNAL NAME 'j1:c1.f1(java.lang.Long, java.lang.Long[])';
対応するJavaメソッド:
public static void f1(Long a, Long[] b)
{ ... }

BLOB(バイナリ ラージ オブジェクト)

BLOB SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.sql.Blob
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A BLOB, OUT B BLOB)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Blob a, java.sql.Blob[] b)
{ ... }

BYTE

BYTE SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし byte[] ([B)
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A BYTE[30], OUT B BYTE[30])
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(byte[] a, byte[][] b)
{ ... }

BYTEINT

BYTEINT SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
byte (B) java.lang.Byte
SQL関数定義の例:
CREATE PROCEDURE F1 (IN A BYTEINT, OUT B BYTEINT)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(byte a, byte[] b)
{ ... }
SQL関数定義の例(NULL値使用可):
CREATE PROCEDURE F1 (IN A BYTEINT, OUT B BYTEINT)
LANGUAGE JAVA
 ...
EXTERNAL NAME 'j1:c1.f1(java.lang.Byte, java.lang.Byte[])';
対応するJavaメソッド:
public static void f1(Byte a, Byte[] b)
{ ... }

CHARACTER/CHAR

CHARACTER SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.lang.String
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A CHAR(30), OUT B CHAR(30))
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(String a, String[] b)
{ ... }

CLOB(文字ラージ オブジェクト)

CLOB SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.sql.Clob
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A CLOB, OUT B CLOB)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Clob a, java.sql.Clob[] b)
{ ... }

DATASET

DATASET SQLデータ型は、次のJavaデータ型にマップします。

格納形式 単純マッピング オブジェクト マッピング
DATASET STORAGE FORMAT AVRO なし
  • java.sql.Blob (デフォルトのマッピング)
  • byte[]
DATASET STORAGE FORMAT CSV なし
  • java.sql.Clob (デフォルトのマッピング)
  • java.lang.String

Avroストレージ形式のDATASET型の場合、デフォルト マッピングはjava.sql.Blobになります。追加のマッピングは、DATASET型をbyte[]にマッピングするために提供されます。このマッピングは、DATASETサイズが64Kを超えない場合に使用できます。これによりLOBベースのパラメータ マッピングよりもパフォーマンスが向上します。

Avroストレージ形式のDATASET型は変換形式に変換されます。これはインスタンスに対して定義されているスキーマで、UTF-8でエンコードされ、NULLで終了し、その後にバイナリ コード化されたAvro値が続きます。

CSVストレージ形式のDATASET型の場合、デフォルト マッピングはjava.sql.Clobになります。追加のマッピングは、DATASET型をjava.lang.Stringにマッピングするために提供されます。このマッピングは、DATASETサイズが64Kを超えない場合に使用できます。これによりLOBベースのパラメータ マッピングよりもパフォーマンスが向上します。

CSVストレージ形式のDATASET型がjava.sql.Clobまたはjava.lang.Stringにマッピングされる場合、CSVデータのみが含まれ、オプション スキーマはまったく含まれません。

SQL関数定義の例:
CREATE PROCEDURE F1 (IN A DATASET(8000) Storage Format Avro, 
                     OUT B DATASET(8000) Storage Format Avro)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Blob a, java.sql.Blob[] b)
{ ... }

DATE

DATE SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.sql.Date
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A DATE, OUT B DATE)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Date a, java.sql.Date[] b)
{ ... }

DECIMAL/NUMERIC

DECIMAL/NUMERIC SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.math.BigDecimal
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A DECIMAL(8,2), OUT B DECIMAL(8,2))
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(BigDecimal a, BigDecimal[] b)
{ ... }

FLOAT / DOUBLE PRECISION / REAL

FLOAT / DOUBLE PRECISION / REAL SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
double (D) java.lang.Double
SQL関数定義の例:
CREATE PROCEDURE F1 (IN A FLOAT, OUT B FLOAT)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(double a, double[] b)
{ ... }
SQL関数定義の例(NULL値使用可):
CREATE PROCEDURE F1 (IN A FLOAT, OUT B FLOAT)
LANGUAGE JAVA
 ...
EXTERNAL NAME 'j1:c1.f1(java.lang.Double, java.lang.Double[])';
対応するJavaメソッド:
public static void f1(Double a, Double[] b)
{ ... }

Geospatialデータ型: MBB

Geospatial MBB SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし
  • java.lang.String (デフォルトのマッピング)
  • double[]

MBB型はデフォルトでjava.lang.Stringにマッピングします。形式は(Xmin,Ymin,Zmin,Xmax,Ymax,Zmax)です。

追加のマッピングはMBBをプリミティブ型ダブル配列double[]にマッピングします。配列には、Xmin、Ymin、Zmin、Xmax、Ymax、およびZmax値に対応する6つのダブル値が含まれます。

MBB型がSTRUCTURED型UDT属性の場合、デフォルト マッピング(java.lang.String)が適用されます。MBB型はどの入れ子レベルでも可能です。

Geospatialデータ型: MBR

Geospatial MBR SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし
  • java.lang.String (デフォルトのマッピング)
  • double[]

MBR型はデフォルトでjava.lang.Stringにマッピングされます。形式は(Xmin,Ymin,Xmax,Ymax)です。

追加のマッピングはMBRをプリミティブ型ダブル配列double[]にマッピングします。配列には、Xmin、Ymin、Xmax、およびYmax値に対応する4つのダブル値が含まれます。

MBR型がSTRUCTURED型UDT属性の場合、デフォルト マッピング(java.lang.String)が適用されます。MBR型はどの入れ子レベルでも可能です。

Geospatialデータ型: ST_Geometry

Geospatial ST_Geometry SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし
  • java.sql.Clob (デフォルトのマッピング)
  • java.sql.Blob
  • com.teradata.fnc.ST_Geometry
  • java.lang.String
  • byte[]

ST_Geometry型は、WKT (Well-Known Text)表現に変換され、ClobとしてJavaルーチンに渡されます。Javaルーチンに渡されたClob値には、ジオメトリ オブジェクト内に含まれる空間参照識別子(SRID)は含まれません。

マッピングは、ST_Geometry型をjava.sql.Blobにマッピングするために提供されます。Geospatial型はWKB (Well-Known Binary)表現に変換され、BlobとしてJavaルーチンに渡されます。Blobには、ジオメトリ オブジェクト内に含まれるSRIDは含まれません。

マッピングは、ST_Geometry型をcom.teradata.fnc.ST_Geometryクラスにマッピングするために提供されます。ST_Geometryオブジェクトを使用して、ジオメトリ値のWKT、WKB、およびSRIDを取得したり、ジオメトリ値をWKT値またはWKB値(提供されるSRIDで)に設定したりできます。これは、SRID値の読み取りまたは設定を行なえる唯一のマッピングです。

非LOBベースのマッピングは、java.lang.String (LATIN文字セットのWKT表現)およびbyte[] (WKB表現)に提供されます。これらのマッピングは、ST_Geometryパラメータ サイズが64Kを超えないことがわかっている場合に使用できます。これにより、LOBベースのパラメータマッピングよりもパフォーマンスが向上します。

ST_Geometry属性を持つSTRUCTURED型UDTをJava UDFまたは外部ストアド プロシージャに渡すことはできません。

ジオメトリをCLOBではなくBLOBとして送信する場合のパフォーマンス上の利点は次のとおりです:
  • ジオメトリはWKB形式でフィールドに内部的に保存されるため、CLOBのWKT形式に変換する必要はありません。
  • ユーザーはジオメトリ データを処理するためにテキスト形式を解析する必要があります。バイナリ形式はテキストを解析せずに簡単にトラバースできます。
  • バイナリ形式には、座標の値と、それらとテキスト形式で表わす文字列を表わす浮動小数点が含まれています。そのため、座標の値のバイナリ形式の精度は少し良くなることがあります。
  • WKB形式はWKT形式よりも小さくなります。

この例では、ST_Geometryクラスへのデフォルト以外のマッピングを使用するST_Geometryパラメータを備えたJava UDFを示します。

REPLACE FUNCTION get_Geom(G1 ST_GEOMETRY)
RETURNS INTEGER
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.get_geom(com.teradata.fnc.ST_Geometry) returns int';
public static int get_geom(com.teradata.fnc.ST_Geometry g1)
   throws SQLException

INTEGER

INTEGER SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
int (I) java.lang.Integer
SQL関数定義の例:
CREATE PROCEDURE F1 (IN A INTEGER, OUT B INTEGER)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(int a, int[] b)
{ ... }
SQL関数定義の例(NULL値使用可):
CREATE PROCEDURE F1 (IN A INTEGER, OUT B INTEGER)
LANGUAGE JAVA
 ...
EXTERNAL NAME 'j1:c1.f1(java.lang.Integer, java.lang.Integer[])';
対応するJavaメソッド:
public static void f1(Integer a, Integer[] b)
{ ... }

Interval SQLデータ型

以下にリストされている内部SQLデータ型は、次のJavaデータ型にマッピングします:
  • INTERVAL DAY
  • INTERVAL DAY TO HOUR
  • INTERVAL DAY TO MINUTE
  • INTERVAL DAY TO SECOND
  • INTERVAL HOUR
  • INTERVAL HOUR TO MINUTE
  • INTERVAL HOUR TO SECOND
  • INTERVAL MINUTE
  • INTERVAL MINUTE TO SECOND
  • INTERVAL MONTH
  • INTERVAL SECOND
  • INTERVAL YEAR
  • INTERVAL YEAR TO MONTH
単純マッピング オブジェクト マッピング
なし java.lang.String
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A INTERVAL MONTH, OUT B INTERVAL MONTH)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(String a, String[] b)
{ ... }

JSON

JSON SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし
  • java.sql.Clob (デフォルトのマッピング)
  • java.sql.Blob
  • java.lang.String
  • byte[]

デフォルトのマッピング先はjava.sql.Clobです。

データをバイナリJSON形式で送信するjava.sql.Blobへのマッピングが提供されます。

非LOBベースのマッピングは、java.lang.String (テキスト表現)およびbyte[] (BSON形式)に提供されます。これらのマッピングは、JSONパラメータ サイズが64Kを超えないことがわかっている場合に使用できます。これにより、LOBベースのパラメータマッピングよりもパフォーマンスが向上します。

JSON属性を含むSTRUCTURED型UDTは、すべての入れ子レベルのJava UDFへのパラメータとして使用できます。JSON値は、インライン値としてStringまたはbyte[]にマッピングされます。Lobマッピングはサポートされていません。

SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A JSON(20) CHARACTER SET LATIN, OUT B JSON(40) CHARACTER SET LATIN)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Clob a, java.sql.Clob[] b)
{ ... }

NUMBER

NUMBER SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.math.BigDecimal
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (INOUT  A NUMBER(30,2))
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(BigDecimal[] a)
{ ... }

PERIOD

Period SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.sql.Struct

Periodデータ型はjava.sql.Structにマップされます。com.teradata.fnc.Structクラスはjava.sql.Structインターフェースを実装します。

Period Structオブジェクトの構造は以下のとおりです。

Period (Date)
java.sql.Struct{
   java.sql.Date,
   java.sql.Date
}
Period(Time)
java.sql.Struct{
   java.sql.Time,
   java.sql.Time
}
Period(Time With Time Zone)
java.sql.Struct{
   java.sql.Struct{
      java.sql.Time, 
      java.util.Calendar,
   }
   java.sql.Struct{
      java.sql.Time, 
      java.util.Calendar
   }
}
Period(Timestamp)
java.sql.Struct{
   java.sql.Timestamp,
   java.sql.Timestamp
}
Period(Timestamp With Time Zone)
java.sql.Struct{
   java.sql.Struct{
      java.sql.Timestamp, 
      java.util.Calendar,
   }
   java.sql.Struct{
      java.sql.Timestamp, 
      java.util.Calendar
   }	
}

Period(Time With Time Zone)およびPeriod(Timestamp With Time Zone)の場合、構造体のTimeオブジェクトまたはTimestampオブジェクトは、入力Time/Timestamp値のローカル時間を保存します。Calendarオブジェクトは入力Time/Timestamp値のタイムゾーン部分のみを保存します。時間、分、秒などのその他の情報は、入力Time/Timestamp値に基づいてCalendarオブジェクトで設定されません。代わりに、この情報は、Calendarオブジェクトが作成されるデフォルト ローカル時間に設定されます。

PERIOD型は任意のレベルのSTRUCTURED型UDTの属性にすることができます。

SMALLINT

SMALLINT SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
short (S) java.lang.Short
SQL関数定義の例:
CREATE PROCEDURE F1 (IN A SMALLINT, OUT B SMALLINT)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(short a, short[] b)
{ ... }
SQL関数定義の例(NULL値使用可):
CREATE PROCEDURE F1 (IN A SMALLINT, OUT B SMALLINT)
LANGUAGE JAVA
 ...
EXTERNAL NAME 'j1:c1.f1(java.lang.Short, java.lang.Short[])';
対応するJavaメソッド:
public static void f1(Short a, Short[] b)
{ ... }

TD_ANYTYPE

TD_ANYTYPE SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.lang.Object

ユーザー定義型(UDT)および複合データ型(CDT)は、TD_ANYTYPEパラメータでJava UDFまたは外部ストアド プロシージャに渡すことができます。これらはJavaルーチンのjava.lang.Objectにマッピングできます。オブジェクト タイプは常にデフォルトのマッピング タイプに対応します。例えば、JSON値がTD_ANYTYPEパラメータでJava UDFに渡される場合、Javaルーチンはjava.sql.Clobオブジェクトを受け取ります。

SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A TD_ANYTYPE, INOUT B TD_ANYTYPE)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.lang.Object a, java.lang.Object[] b)
{ ... }

TIME

TIME SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.sql.Time
SQL型によって提供されるナノ秒時間の絶対精度を許可しません
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A TIME, OUT B TIME)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Time a, java.sql.Time[] b)
{ ... }

TIME WITH TIME ZONE

TIME WITH TIME ZONE SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし
  • java.sql.Time (デフォルトのマッピング)
  • java.sql.Struct
TIME WITH TIME ZONE型は、デフォルトでjava.sql.Timeにマッピングします。以下が適用されます。
  • このマッピングはSQL型によって提供されるナノ秒時間の絶対粒度を許可しません。
  • このマッピングはタイムゾーン オフセットを保持しません。

TIME WITH TIME ZONEをjava.sql.Structにマッピングするマッピングが提供されます。java.sql.Structへのマッピングでは、タイムゾーン値をJavaルーチンに渡すことができます。com.teradata.fnc.Structクラスはjava.sql.Structインターフェースを実装します。

Time with Time Zone Structオブジェクトは、次のように構成されます:
Time with Time Zone
   java.sql.Struct{
      java.sql.Time,
      java.util.Calendar
   }

構造体のTimeオブジェクトは、入力Time値のローカル時間を保存します。Calendarオブジェクトは、入力Time値のタイムゾーン部分のみを保存します。時間、分、秒などのその他の情報は、入力Time値に基づいてCalendarオブジェクトで設定されません。代わりに、この情報は、Calendarオブジェクトが作成されるデフォルト ローカル時間に設定されます。

TIME WITH TIME ZONE型がSTRUCTURED型UDT属性または配列要素型である場合、デフォルトのマッピング(java.sql.Time)が適用されます。

SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A TIME WITH TIME ZONE, OUT B TIME WITH TIME ZONE)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Struct a, java.sql.Struct[] b)
{ ... }

TIMESTAMP

TIMESTAMP SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.sql.Timestamp
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A TIMESTAMP, OUT B TIMESTAMP)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Timestamp a, java.sql.Timestamp[] b)
{ ... }

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし
  • java.sql.Timestamp (デフォルトのマッピング)
  • java.sql.Struct

TIMESTAMP WITH TIME ZONEデータ型は、デフォルトでjava.sql.Timestampにマップします。このマッピングはタイムゾーン オフセットを保持しません。

TIMESTAMP WITH TIME ZONEをjava.sql.Structにマッピングするマッピングが提供されます。java.sql.Structへのマッピングでは、タイムゾーン値をJavaルーチンに渡すことができます。com.teradata.fnc.Structクラスはjava.sql.Structインターフェースを実装します。

Timestamp with Time Zone Structオブジェクトは、次のように構成されます:
Timestamp with Time Zone
   java.sql.Struct{
      java.sql.Timestamp,
      java.util.Calendar
   }

構造体のTimestampオブジェクトは、入力Timestamp値のローカル時間を保存します。Calendarオブジェクトは、入力Timestamp値のタイムゾーン部分のみを保存します。時間、分、秒などのその他の情報は、入力Timestamp値に基づいてCalendarオブジェクトで設定されません。代わりに、この情報は、Calendarオブジェクトが作成されるデフォルト ローカル時間に設定されます。

例えば、入力Timestamp値が"2001-02-05 05:13:11.207000 -00:30"の場合、次の構造体にマッピングされます:
Struct{
   java.sql.Timestamp;
   java.util.Calendar;
}

Timestampオブジェクトは、JVMデフォルト タイムゾーンに基づくローカル時間の"2001-02-05 05:13:11.207000"になります。Calendarオブジェクトは"GMT-00:30"になります。

TIMESTAMP WITH TIME ZONE型がSTRUCTURED型UDT属性または配列要素型である場合、デフォルトのマッピング(java.sql.Timestamp)が適用されます。

SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A TIMESTAMP WITH TIME ZONE, OUT B TIMESTAMP WITH TIME ZONE)
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(java.sql.Struct a, java.sql.Struct[] b)
{ ... }

UDT (Distinct)

DISTINCT型UDT SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
intまたはshortなどのJavaプリミティブ データ型
ベース データ型に対応するJavaクラス。例えば、次のようになります。
  • java.lang.Integer
  • java.lang.Double
  • ..。

DISTINCT型UDTが事前定義型に対応するJava型(単純またはオブジェクト マッピング)にマッピングされます。DISTINCT型UDTは、Javaルーチンに渡される前に事前定義型に変換されます。

DISTINCT型UDTのデフォルトマッピングは、プリミティブJavaデータ型への単純なマッピングです。つまり、Javaパラメータ宣言がCREATE FUNCTION文またはCREATE PROCEDURE文のEXTERNAL NAME句で指定されていない場合、DISTINCT型UDTがプリミティブJavaデータ型にマッピングされます。その他の場合、マッピングは宣言のパラメータ型に基づいて行なわれます。

DISTINCT型UDTは、STRUCTURED型UDT属性または配列要素型である場合、対応するJavaデータ型にマッピングされるオブジェクトになります。

この例では、EXTERNAL NAME句のJavaルーチン宣言にパラメータ リストは含まれません。そのため、単純なマッピング(デフォルト)がMyInt UDTに使用されます。

CREATE TYPE MYINT AS INTEGER FINAL;
REPLACE FUNCTION MyScore(A1 MYINT)
RETURNS MYINT
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.myScore';
対応するJavaメソッド:
public static int myScore(int a) throws SQLException

UDT (Structured)

STRUCTURED型UDT SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.sql.Struct

STRUCTURED型UDTはjava.sql.Structにマップされます。com.teradata.fnc.Structクラスはjava.sql.Structインターフェースを実装します。

LOBを持つSTRUCTURED型UDTはネストされたレベルではサポートされません。LOBはネストの最初のレベルでのみ許可されます。

XMLまたはST_Geometry属性を持つSTRUCTURED型UDTはサポートされません。

VARBYTE

VARBYTE SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし byte[] ([B)
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A VARBYTE(30), OUT B VARBYTE(30))
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(byte[] a, byte[][] b)
{ ... }

VARCHAR / CHARACTER VARYING / CHAR VARYING / LONG VARCHAR

VARCHAR SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし java.lang.String
SQL関数定義の例(デフォルト マッピング、NULL値使用可):
CREATE PROCEDURE F1 (IN A VARCHAR(30), OUT B VARCHAR(30))
LANGUAGE JAVA
 ...;
対応するJavaメソッド:
public static void f1(String a, String[] b)
{ ... }

XML

XML SQLデータ型は、次のJavaデータ型にマップします。

単純マッピング オブジェクト マッピング
なし
  • java.sql.SQLXML (デフォルトのマッピング)
  • java.lang.String
  • java.sql.Blob
  • byte[]

java.sql.SQLXMLにマップされると、XML型はJava環境によってCLOBベースの型として扱われます。com.teradata.fnc.SQLXMLクラスはjava.sql.SQLXMLインターフェースを実装します。

UNICODEのXML文字列を送信するjava.lang.Stringへのマッピングが提供されます。マッピングは、XML値のサイズが64K未満である場合に使用できます。

XMLデータをUTF-8形式で送信するjava.sql.Blobおよびbyte[]へのマッピングが提供されます。

XML属性を持つSTRUCTURED型UDTをJava UDFまたは外部ストアド プロシージャに渡すことはできません。