TimesTenにおける相違点: データ型に関する考慮事項

データ型のサポートおよび型変換に関するTimesTen固有の考慮事項を示します。

PL/SQLのデータ型とTimesTen SQLのデータ型との変換

TimesTenでは、PL/SQLのデータ型とTimesTen SQLのデータ型との間の変換がサポートされています。

このサポートについては、次の項で説明します。

PL/SQLからSQLへのサポートされている変換

特定のPL/SQLデータ型をSQLデータ型に変換できます。

表3-5に、サポートされているデータ型の変換を示します(上の1行がPL/SQLの型を表し、左の1列がSQLの型を表します)。データ型はデータ型ファミリごとに分類されており、列がPL/SQLの型ファミリを表し、行がTimesTenの型ファミリを表します。「はい」は該当の2つのファミリ間で変換が可能であることを示します。サポートされている変換は双方向です。

ノート:

「サポートされていないデータ型」も参照してください。

表3-5 PL/SQLデータ型とTimesTen SQLデータ型との間のサポートされている変換

型ファミリ NUMERIC CHARACTER BINARY DATETIME INTERVAL ROWID

NUMERIC

はい

はい

いいえ

いいえ

いいえ

いいえ

CHARACTER

はい

はい

はい

はい

はい

はい

DATETIME

いいえ

はい

いいえ

はい

いいえ

いいえ

TIME

いいえ

はい

いいえ

いいえ

いいえ

いいえ

ROWID

いいえ

はい

いいえ

いいえ

いいえ

はい

BINARY

いいえ

はい

はい

いいえ

いいえ

はい

PL/SQLからSQLへの推奨されるマッピング

TimesTenのデータ型をPL/SQLにマップする際の推奨事項を示します。

表3-6に、TimesTenデータ型の概要、およびPL/SQLへの型マッピングに関する推奨事項を示します。

表3-6 データ型の使用方法およびサイズ

TimesTenのデータ型 説明

TT_TINYINT

0から255までの範囲の符号なし整数が対象です。

型PL/SQL NUMBERまたはPL/SQL PLS_INTEGER(またはBINARY_INTEGER)の値をTT_TINYINT列に挿入する場合、数値オーバーフローが発生する可能性があります。

TT_SMALLINT

-32,768から32,767の範囲の16ビットの符号付き整数が対象です。

型PL/SQL NUMBERまたはPL/SQL PLS_INTEGER(またはBINARY_INTEGER)の値をTT_SMALLINT列に挿入する場合、数値オーバーフローが発生する可能性があります。

TT_INTEGER

-2,147,483,648から2,147,483,647の範囲の符号付き整数が対象です。

これは、PLS_INTEGERと同等です。

TT_BIGINT

-9,223,372,036,854,775,808から9,223,372,036,854,775,807の範囲の8バイトの符号付き整数が対象です。

PL/SQL NUMBERを使用します。PL/SQL PLS_INTEGER(またはBINARY_INTEGER)変数はオーバーフローする可能性があります。

NUMBERBINARY_FLOATBINARY_DOUBLE

浮動小数点の精度が必要な場合に使用します。

キャラクタ・タイプ

すべてのPL/SQLキャラクタ・タイプに、32,767バイトまでのデータを格納できます。

  • TimesTenのCHARには、8300バイトまでのデータを格納できます。

  • TimesTenのNCHARには、4150文字(8300バイト)までのデータを格納できます。

  • TimesTenのVARCHAR2には、4,194,304バイトまでのデータを格納できます。

  • TimesTenのNVARCHAR2には、2,097,152文字(4,194,304バイト)までのデータを格納できます。

日時、時間隔および時間の型

これらの型をキャラクタ・タイプ間で変換するときに使用されるデフォルトの書式とは異なる書式が必要な場合は、組込みファンクションTO_CHARおよびTO_DATEを使用します。

バイナリ型

  • TimesTenのBINARYには、8300バイトまでのデータを格納できます。

  • TimesTenのVARBINARYには、4,194,304バイトまでのデータを格納できます。

  • RAWおよびLONG RAWには、32,767バイトまでのデータを格納できます。

PL/SQLからSQLへの変換の例

これは、PL/SQLからSQLへの変換の例です。

2つの列を持つ表がある場合を検討します。Col1のデータ型はTT_INTEGERであり、Col2のデータ型はNUMBERです。PL/SQLプログラムで、型PLS_INTEGERv_var1および型VARCHAR2v_var2という2つの変数を宣言します。SELECTによって表のデータ行を2つのPL/SQL変数に格納します。

SELECT文を実行すると、データ型の変換が行われます。Col1は、TimesTenのSQL TT_INTEGER型からPLS_INTEGER型に変換されます。Col2は、TimesTenのSQL NUMBER型からPL/SQL VARCHAR2型に変換されます。問合せが正しく実行されます。

Command> CREATE TABLE test_conversion (Col1 TT_INTEGER, Col2 NUMBER);
Command> INSERT INTO test_conversion VALUES (100, 20);
1 row inserted.

Command>  DECLARE
           v_var1 PLS_INTEGER;
           v_var2 VARCHAR2 (100);
          BEGIN
           SELECT Col1, Col2 INTO v_var1, v_var2 FROM test_conversion;
          DBMS_OUTPUT.PUT_LINE (v_var1);
          DBMS_OUTPUT.PUT_LINE (v_var2);
         END;
         /
100
20
 
PL/SQL procedure successfully completed.

日付書式およびタイムスタンプ書式: NLS_DATE_FORMATおよびNLS_TIMESTAMP_FORMAT

TimesTenでは、ユーザー指定のNLS_DATE_FORMAT設定およびNLS_TIMESTAMP_FORMAT設定はサポートされていません。

  • NLS_DATE_FORMATは常にyyyy-mm-ddです。

  • NLS_TIMESTAMP_FORMATは常にyyyy-mm-dd hh:mi:ss.ff6(秒を示す小数点以下桁数が6桁まで)です。

SQLおよびPL/SQL TO_DATEおよびTO_CHARファンクションを使用して、必要な他の形式を指定することができます。『Oracle TimesTen In-Memory Database SQLリファレンス』を参照してください。

サポートされていないデータ型

サポートされていないデータ型を示します。

  • PL/SQLデータ型カテゴリ: TimesTenのPL/SQLでは、インターネット・データ型(XMLTypeURITypeHttpURIType)またはAnyデータ型(AnyTypeAnyDataAnyDataSet)はサポートされていません。

  • PL/SQLスカラー・データ型: TimesTenでは、PL/SQLデータ型TIMESTAMP WITH [LOCAL] TIME ZONEおよびUROWIDはサポートされていません。