ヘッダーをスキップ
Oracle® Database Heterogeneous Connectivityユーザーズ・ガイド
12cリリース1 (12.1)
E52376-02
  目次へ移動
目次
索引へ移動
索引

前
次へ
 

リモート・マップ文に対するデータ型チェックのサポート

Oracleデータベースは、同機種環境では常にデータ型チェックおよびデータ型の強制を実行します。たとえば、SELECT * FROM EMP WHERE EMPNO='7934'は、SELECT * FROM EMPNO WHERE EMPNO=7934と同じ結果を戻します。異機種環境でも同様に、リモート・マップ文に対して完全なデータ型チェックのサポートがあります。一般的に、SQL文のオペランドは、列、リテラル、バインド変数のいずれであっても、データ型チェックのために内部処理されます。次の例を参考にしてください。

SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN='123'
SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN=CHAR_COLUMN;
SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN=CHAR_BIND_VARIABLE;

ほとんどのOracle以外のデータベースは、データ型の強制をサポートしていないため、前述の文がそのままOracle以外のデータベースに送信された場合は失敗します。Oracleデータベースの異機種間サービス・コンポーネントは、Oracle以外のデータベースに使用可能な文を送る前に、データ型チェックと必要なデータ型の強制を実行します。

データ型チェックは、処理後の文またはリモート・マップ文に対して一環した動作を提供します。次の2つの文を考えてみます。

SELECT * FROM EMP@LINK WHERE TO_CHAR(EMPNO)='7933' + '1';

および

SELECT * FROM EMP@LINK WHERE EMPNO='7933' + '1';

前述のどちらの文も、Oracle以外のデータベースでTO_CHAR関数がサポートされているかどうかに関係なく、同じ結果および強制が提供されます。ここで、次の文を考えてみます。

SELECT * FROM EMP@LINK WHERE EMPNO='123abc' + '1';

データ型チェックが実施されているため、Oracle内で強制が試行されるとエラーが発生し、Oracle以外のデータベースに文が送られることなくエラーが戻されます。

つまり、処理後の文であるかリモート・マップ文であるかに関係なく、データ型チェックおよび強制の動作は一貫しています。