4.5 Oracle DatabaseのSQL構文の処理
Oracle Database Gateway製品の最も重要な機能の1つは、ユーザーやアプリケーション・プログラマにSQLの透過性を提供することです。
外部のSQL構文は、次の4つの形式に分類されます。
- 「互換性のあるSQL関数」
Oracleデータベースは、互換性のあるSQL関数をDRDAデータベースに自動的に転送します。この場合、同じ構文と意味を持つSQL構成は、OracleデータベースとDRDAデータベースの両方に存在します。 - 「変換済SQL関数」
変換された関数の意味は同じですが、OracleデータベースとDRDAデータベース間では名前が異なります。 ただし、すべてのアプリケーションでは、Oracleの関数名を使用する必要があります。 - 「補正されたSQL関数」
Oracleデータベースでサポートされる一部の高度なSQL構成は、DRDAデータベースで同じ方法でサポートされない場合があります。 - 「ネイティブ・セマンティックSQL関数」
通常補償される一部のSQL関数は、ネイティブ・セマンティクス機能を使用してオーバーライドすることもできます。
親トピック: アプリケーションの開発
4.5.1 互換型SQL関数
Oracleデータベースは、互換性のあるSQL関数をDRDAデータベースに自動的に転送します。この場合、同じ構文と意味を持つSQL構成は、OracleデータベースとDRDAデータベースの両方に存在します。
これらのSQL構文は、変更されずに転送されます。 互換性のあるすべての関数は、列関数です。 互換性のない関数は、等価のDRDA SQL関数に変換されるか、DRDAデータベースからデータが戻された後にOracle Databaseにより補正(後処理)されます。
親トピック: Oracle Database SQL構成の処理
4.5.2 変換型SQL関数
変換型関数は、Oracle DatabaseとDRDAデータベース間で意味は同じですが異なる名前を持つ関数です。 ただし、すべてのアプリケーションでは、Oracleの関数名を使用する必要があります。
DRDAデータベースにより異なる構文(異なる関数名)でサポートされるSQL構文は、Oracle Databaseによって自動的に変換され、DRDAデータベースに転送されます。 Oracle Databaseは、DRDAデータベースに関数名を送信する前に、アプリケーションに対して透過的な方法でその関数名を変更します。
親トピック: Oracle Database SQL構成の処理
4.5.3 補正型SQL関数
Oracleデータベースでサポートされる一部の高度なSQL構成は、DRDAデータベースで同じ方法でサポートされない場合があります。
補正関数は、DRDAサーバーによって認識されない、またはDRDAサーバーによって認識されるが、DRDAサーバーとOracleデータベースを比較する場合、関数のセマンティクスの解釈が異なるSQL関数です。 これらの関数のいずれかを含むSELECT
文がOracleデータベースからゲートウェイに渡される場合、ゲートウェイはSQL文をDRDAサーバーに渡す前に関数を削除します。 ゲートウェイは、選択されたDRDAデータベースの行をOracle Databaseに渡します。 Oracle Databaseは、その関数を適用します。
- Post-Processing
Oracleデータベースは、DRDAデータベースに転送されるSQLリクエストから互換性のないSQL構成を自動的に除外することで、欠落または互換性のない関数を補うことができます。
親トピック: Oracle Database SQL構成の処理
4.5.3.1 後処理
Oracle Databaseでは、DRDAデータベースに転送されたSQLリクエストから互換性のないSQL構文を自動的に除外することで、存在しない関数や互換性のない関数を補正できます。
Oracle Databaseは、DRDAデータベースから必要なデータを取得し、関数を適用します。 このプロセスは、後処理と呼ばれます。
ゲートウェイでは、すべてのSQL関数をDRDAデータベースに渡そうとします。 ただし、計算に出現する関数がDRDAデータベースでサポートされない場合、ゲートウェイではその関数を変更します。 たとえば、プログラムがz/OSデータベースのDB2 UDBに対して次の問合せを実行する場合:
SELECT COS(X_COOR) FROM TABLE_X;
データベースはCOS
関数の多くをサポートしていないため、ゲートウェイは問合せを次のように変更します:
SELECT X_COOR FROM TABLE_X;
TABLE_X
の X_COOR
列のすべてのデータは、z/OSデータベースのDB2 UDBからOracleデータベースに渡されます。 データがOracleデータベースに移動されると、COS
関数が実行されます。
DRDAデータベースに格納された大量のデータに対して操作を実行する場合、一部の関数では後処理が必要になることに注意してください。
親トピック: 補正されたSQL関数
4.5.4 ネイティブ・セマンティクスSQL関数
通常補正される一部のSQL関数は、ネイティブ・セマンティクス機能を通じて上書きすることも可能です。
SQL関数がネイティブ・セマンティクスに対して有効になっている場合、関数は、補償されるのではなく、処理のためにDRDAデータベースに渡すことができます。 その後、SQL関数はDRDAデータベースでネイティブに処理されます。 詳細は、「ネイティブ・セマンティクス」を参照してください。
親トピック: Oracle Database SQL構成の処理