この項では、TimesTenとOracleのSQL実装を比較します。TimesTenでサポートされていないか、または別のセマンティクスでサポートされているOracle SQL機能のリストを提供することが目的です。具体的には、Oracle9iとTimesTen 6.0の機能を比較します。
TimesTenでは、Oracleでサポートされているスキーマ・オブジェクトの一部が認識されません。文でこれらのオブジェクトが処理または使用されると、TimesTenは構文エラーを返し、Oracleにその文を渡します。サポートされていないオブジェクトは、次のとおりです。
TimesTenでキャッシュできない表相当のオブジェクトがあります。これらのオブジェ句が含まれている文は、TimesTenに同じ名前を持つローカル・オブジェクトがない場合、常にOracleにパススルーされます。これらの表相当のオブジェクトには、次の2つがあります。
TimesTenでサポートされないOracle表機能は、次のとおりです。
キャッシュ・グループ表定義の作成時に、Oracle表の各列に対してTimesTenデータ型を選択する必要があります(「OracleとTimesTenのデータ型のマッピング」を参照)。この項では、キャッシュ・グループの作成に使用できるデータ型マッピングおよびデータ型変換ルールについて説明します。問合せでのデータ型マッピングについては、「パススルー問合せのためにサポートされているOracleデータ型」を参照してください。
列のNULL値可能属性は、OracleとTimesTenで一致している必要があります。主キー・フィールドでは、TimesTenおよびOracleの両方の列がNOT NULLである必要があります。主キー以外のフィールドで列のNULL値可能かどうかがOracleとTimesTenで一致していない場合は、警告を受信します。
長さ0(ゼロ)のCHAR値は、TimesTenではNOT NULLとして受け入れられますが、OracleではNULL値とみなされます。たとえば、次のように入力して表testを作成します。
次のようにデータを挿入します。
INSERTは、TimesTenでは受け入れられますが、Oracleでは受け入れられません。このため、REFRESH実行時に問題が発生する可能性があります。
TimesTenでは、2つのセットのデータ型マッピングがサポートされています。制限の少ないルール・セットは、1つの表のみが含まれているキャッシュ・グループ用です。これらのキャッシュ・グループに対する処理は、LOAD CACHE GROUP、UNLOAD CACHE GROUPおよびREFRESH CACHE GROUP処理に制限されます。WHEREおよびWITH ID句は、これらの処理では使用できません。
次の項では、OracleとTimesTenのデータ型をマップする方法について説明します。
制限付きキャッシュ・グループの列に対して使用可能なマッピングのセットは、次のとおりです(「制限付きキャッシュ・グループについて」を参照)。
制限なしのキャッシュ・グループでは、制限の多いデータ型マッピングが使用されます。ロード処理、アンロード処理、リフレッシュ処理およびフラッシュ処理には、制限なしのキャッシュ・グループに対する制限はありません。これらのキャッシュ・グループでは、主キーおよび外部キーの列は、キー以外の列と区別されます。制限なしのキャッシュ・グループのキー列に対して使用可能なマッピングのセットは、次のとおりです。
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キャッシュ・エージェントはこの条件を確認しません。 |
問合せを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 |
TimesTenでは、次のOracle演算子および条件がサポートされています。
TimesTenでは、次のOracleスカラー関数がサポートされています。
TimesTenでは、次のOracle式がサポートされています。
TimesTenでは、次のOracle副問合せがサポートされています。
TimesTenでは、次のOracle問合せがサポーされています。
TimesTenでは、次のOracle DML文がサポートされています。
この項では、OracleではサポートされていないTimesTenのSQL実装を示します。PassThrough= 3を設定すると、次の文はOracleに渡され、エラーが発生します。