ヘッダーをスキップ
Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド
リリース6.0
B25773-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

SQLとの互換性

この項では、TimesTenとOracleのSQL実装を比較します。TimesTenでサポートされていないか、または別のセマンティクスでサポートされているOracle SQL機能のリストを提供することが目的です。具体的には、Oracle9iとTimesTen 6.0の機能を比較します。

SQL: ファースト・クラス・スキーマ・オブジェクト

TimesTenでは、Oracleでサポートされているスキーマ・オブジェクトの一部が認識されません。文でこれらのオブジェクトが処理または使用されると、TimesTenは構文エラーを返し、Oracleにその文を渡します。サポートされていないオブジェクトは、次のとおりです。

TimesTenでキャッシュできない表相当のオブジェクトがあります。これらのオブジェ句が含まれている文は、TimesTenに同じ名前を持つローカル・オブジェクトがない場合、常にOracleにパススルーされます。これらの表相当のオブジェクトには、次の2つがあります。

OracleとTimesTenの表の相違

TimesTenでサポートされないOracle表機能は、次のとおりです。

キャッシュ・グループの作成のためにサポートされているOracleデータ型

キャッシュ・グループ表定義の作成時に、Oracle表の各列に対してTimesTenデータ型を選択する必要があります(「OracleとTimesTenのデータ型のマッピング」を参照)。この項では、キャッシュ・グループの作成に使用できるデータ型マッピングおよびデータ型変換ルールについて説明します。問合せでのデータ型マッピングについては、「パススルー問合せのためにサポートされているOracleデータ型」を参照してください。

列のNULL値可能属性は、OracleとTimesTenで一致している必要があります。主キー・フィールドでは、TimesTenおよびOracleの両方の列がNOT NULLである必要があります。主キー以外のフィールドで列のNULL値可能かどうかがOracleとTimesTenで一致していない場合は、警告を受信します。

長さ0(ゼロ)のCHAR値は、TimesTenではNOT NULLとして受け入れられますが、OracleではNULL値とみなされます。たとえば、次のように入力して表testを作成します。

CREATE TABLE test(
Column1 CHAR(10) NOT NULL,
Column2 CHAR(10) NOT NULL,
PRIMARY KEY(Column1)
);

次のようにデータを挿入します。

INSERT INTO test1 VALUES ('ABCD', '');

INSERTは、TimesTenでは受け入れられますが、Oracleでは受け入れられません。このため、REFRESH実行時に問題が発生する可能性があります。

TimesTenでは、2つのセットのデータ型マッピングがサポートされています。制限の少ないルール・セットは、1つの表のみが含まれているキャッシュ・グループ用です。これらのキャッシュ・グループに対する処理は、LOAD CACHE GROUP、UNLOAD CACHE GROUPおよびREFRESH CACHE GROUP処理に制限されます。WHEREおよびWITH ID句は、これらの処理では使用できません。

注意: Oracleデータ型を複数のTimesTenデータ型にマップできる場合は、可能なかぎり、TimesTen Integer型を選択します。それ以外の場合は、REAL、DOUBLEなどの浮動小数点型を検討してください。DECIMALおよびNUMERIC型は、パフォーマンスおよびメモリ使用での効率が低下します。

次の項では、OracleとTimesTenのデータ型をマップする方法について説明します。

制限付きキャッシュ・グループのマッピング

制限付きキャッシュ・グループの列に対して使用可能なマッピングのセットは、次のとおりです(「制限付きキャッシュ・グループについて」を参照)。

Oracle型
TimesTen型
NUMBER
TINYINT、SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL、FLOAT、DOUBLE、CHAR、VARCHAR
VARCHAR2、LONG、RAW、LONG RAW、CHAR
CHAR、VARCHAR、BINARY、VARBINARY
FLOAT、REAL、DOUBLE PRECISION
TINYINT
SMALLINT
INTEGER
BIGINT
NUMERIC
DECIMAL
REAL
FLOAT
DOUBLE
TIMESTAMP
DATE
TIME
TIMESTAMP
INTEGER
TINYINT
SMALLINT
INTEGER
BIGINT
DECIMAL(m,n)
REAL
FLOAT
DOUBLE
DATE
TIMESTAMP、TIME、DATE

制限なしのキャッシュ・グループのキー列のマッピング

制限なしのキャッシュ・グループでは、制限の多いデータ型マッピングが使用されます。ロード処理、アンロード処理、リフレッシュ処理およびフラッシュ処理には、制限なしのキャッシュ・グループに対する制限はありません。これらのキャッシュ・グループでは、主キーおよび外部キーの列は、キー以外の列と区別されます。制限なしのキャッシュ・グループのキー列に対して使用可能なマッピングのセットは、次のとおりです。

Oracle型
TimesTen型
NUMBER(p,s)
DECIMAL1
TINYINT
SMALLINT
INTEGER
BIGINT
NUMBER(p)
TINYINT
SMALLINT
INTEGER
BIGINT
CHAR(m)
CHAR(m) m <=2000
VARCHAR2(m)
VARCHAR(m) m <=4000
INTEGER
TINYINT
SMALLINT
INTEGER
BIGINT
DECIMAL(40,0)
RAW(m)
VARBINARY(m) m <=2000
TIMESTAMP(6)
TIMESTAMP
DATE
TIMESTAMP
1またはNumeric(p,s)。TimesTenでは、NUMERIC型とDECUMAL型は同じです。

制限なしのキャッシュ・グループのキー以外の列のマッピング

制限なしのキャッシュ・グループのキー以外の列に対して使用可能なマッピング・セットは、次のとおりです。

Oracle型
TimesTen型
NUMBER(p,s)1
NUMBER(p)
NUMBER
TINYINT
SMALLINT
INTEGER
BIGINT
DECIMAL(p,s)2
REAL
FLOAT
DOUBLE
CHAR(m)
CHAR(m) m <=2000
VARCHAR2(m)
VARCHAR(m) m <=4000
INTEGER
TINYINT
SMALLINT
INTEGER
BIGINT
DECIMAL(p,s)
REAL
FLOAT
DOUBLE
RAW(m)
VARBINARY(m) m <=2000
LONG
VARCHAR(n)(n >= Oracle表のこのフィールドに保存されている最大値の場合)3
LONG RAW
VARBINARY(n)(n >= Oracle表のこのフィールドに保存されている最大値の場合)4
TIMESTAMP、TIMESTAMP(x)
0 <=x <=9
TIMESTAMP
FLOAT、REAL、DOUBLE PRECISION
DOUBLE
DATE
DATE、TIMEまたはTIMESTAMP
1Oracle NUMBER(p,s)は、TimesTen DECIMAL(p,s)にマップすることをお薦めします。これらの型の精度およびスケールは同じです。そうでない場合、キャッシュ・グループの作成時にTimesTenで警告が生成されます。また、TimesTenキャッシュからOracle、またはOracleからTimesTenキャッシュに値が伝播される際に、エラーが生成されるか、値の精度が失われる場合があります。
2またはNUMERIC(p,s)。TimesTenでは、NUMERIC型とDECIMAL型は同じです。Oracle NUMBER(p,s)は、TimesTen DECIMAL (p,s)にマップすることをお薦めします。これらの型の精度およびスケールは同じです。そうでない場合、キャッシュ・グループの作成時にTimesTenで警告が生成されます。また、TimesTenキャッシュからOracle、またはOracleからTimesTenキャッシュに値が伝播される際に、エラーが生成されるか、値の精度が失われる場合があります。
3キャッシュ・エージェントはこの条件を確認しません。
4キャッシュ・エージェントはこの条件を確認しません。

説明

パススルー問合せのためにサポートされているOracleデータ型

問合せをTimesTenキャッシュを介してOracleに渡す場合、TimesTenはOracleデータ型をTimesTenデータ型に変換します。キャッシュ・グループの作成時に使用可能なデータ型マッピングについては、「キャッシュ・グループの作成のためにサポートされているOracleデータ型」を参照してください。

サポートされているOracle組込みデータ型およびそれらに対応するTimesTen型は、次のとおりです。

Oracleデータ型
TimesTenデータ型
VARCHAR2(size)
VARCHAR(size)
NVARCHAR2(size)
N/A
NUMBER
VARCHAR(133)または任意の整数型(「制限およびサポートされていないデータ型」を参照)
NUMBER(3)
TINYINT
NUMBER(5)
SMALLINT
NUMBER(10)
INTEGER
NUMBER(19)
BIGINT
NUMBER(p,s)
DECIMAL(p,s)
LONG
VARCHAR(4194304)
TIMESTAMP (without TIMEZONE)
TIMESTAMP
TIMESTAMP (with TIMEZONE)
N/A
DATE
TIMESTAMP
INTERVAL
TimesTenでは、中間結果のINTERVALデータ型はサポートされていますが、INTERVALデータのストレージはサポートされていません。Oracle EXTRACT関数を使用すると、INTERVALデータを抽出し、TimesTenのBIGINTまたはDECIMALデータとして返すことができます。
RAW(size)
VARBINARY(size)
LONG RAW
VARBINARY(4194304)
ROWID
N/A
UROWID [(size)]
N/A
CHAR(size)
CHAR(size)
NCHAR2(size)
N/A
NCHAR(size)
N/A
DOUBLE
DOUBLE
FLOAT
DOUBLE
CLOB
N/A
NCLOB
N/A
BLOB
N/A
BFILE
N/A
REF
N/A

制限およびサポートされていないデータ型

SQL演算子

TimesTenでは、次のOracle演算子および条件がサポートされています。

SQLスカラー関数

TimesTenでは、次のOracleスカラー関数がサポートされています。

SQL式

TimesTenでは、次のOracle式がサポートされています。

SQL副問合せ

TimesTenでは、次のOracle副問合せがサポートされています。

注意: 検証不能スカラー副問合せとは、実行時までその単一行結果セット・プロパティを決定できないスカラー副問合せのことです。TimesTenでは、問合せ全体で1つ以下の検証不能スカラー副問合せを許容できますが、この副問合せはOR式には指定できません。

SQL問合せ

TimesTenでは、次のOracle問合せがサポーされています。

INSERT/DELETE/UPDATE文

TimesTenでは、次のOracle DML文がサポートされています。

TimesTenのみのSQL

この項では、OracleではサポートされていないTimesTenのSQL実装を示します。PassThrough= 3を設定すると、次の文はOracleに渡され、エラーが発生します。

他のSQLの問題