4.9 ネイティブ・セマンティクス
Oracleデータベースでサポートされる一部の高度なSQL構成は、DRDAデータベースで同じ方法でサポートされない場合があります。
この場合、Oracleデータベースは、DRDAデータベース・データをOracleデータベース機能で後処理することで、欠落または互換性のない機能を補います
関連項目:
詳細は、「Oracle Database SQL構成の処理」を参照してくださいこの機能により最大限の透過性が提供されますが、パフォーマンスに影響が出る可能性があります。 また、特定のDRDAデータベースの新規バージョンでは、以前のサポート対象外の関数または機能が実装される可能性や、Oracle Database関数との互換性の高いサポート対象のセマンティクスが変更される可能性があります。
一部のDRDAサーバーでは、ユーザー定義関数もサポートされます。 ユーザーは、Oracleデータベース機能をDRDAデータベースにネイティブに実装することを選択できます。 これにより、DRDAサーバーは基礎となるデータベース実装(DB2など)に関数を渡すことができます。 ネイティブ・セマンティクスにより、DRDAサーバーで特定の機能をネイティブに処理する方法が提供されます。
ネイティブ・セマンティクスの考慮事項
特定の関数でネイティブ・セマンティクス機能を有効化する場合、ネイティブ・セマンティクスには一般的に透過性とパフォーマンスのトレードオフ関係に対応するメリットおよびデメリットが存在するため、様々なことを考慮する必要があります。
- このような考慮事項の1つとして、データ強制変換の透過性があげられます。 Oracle Databaseでは、多くのSQL関数について強制変換(暗黙的データ変換)が行われます。 つまり、特定の関数に対して指定された値が正しくない場合、その値は処理の前にOracle Databaseによって強制的に変換されます(正しい値タイプに変更されます)。 ただし、ネイティブ・セマンティク機能が有効な場合、その値は、指定された値のままDRDAサーバーに渡されて処理されます。 多くの場合、DRDAサーバーでは値を正しいタイプに強制変換できないため、エラーが発生します。
- もう1つの考慮事項は、特定のSQL関数のパラメータの互換性に関することです。 たとえば、
SUBSTR
のOracleデータベース実装では、文字列索引に負の値を使用できますが、SUBSTR
のほとんどのDRDAサーバー実装では、文字列索引に負の値を使用できません。 ただし、アプリケーションがDRDAサーバーと互換性のある方法でSUBSTR
を起動するように実装されている場合、この関数はOracleデータベースまたはDRDAサーバーのどちらでも同じように動作します。 - また別の考慮事項は、環境内のリソース制約を理由として、DRDAサーバーでの関数の処理が望ましくない場合があることです。
これらの機能の有効化または無効化の詳細は、HS_FDS_CAPABILITYを参照してください。 次の機能のOracleデータベース形式については、「Oracle Database SQL言語リファレンス」を参照してください。
- 「有効にできるSQL関数」
このトピックでは、有効にできるSQL関数を示します。 - 「無効にできるSQL関数」
このトピックでは、無効にできるSQL関数について説明します。 - 「SQLセット演算子および句」
WHERE
句とHAVING
句は、DRDAサーバーのすべてのバージョンと互換性があります。
親トピック: アプリケーションの開発
4.9.1 有効化可能なSQL関数
このトピックでは、有効にできるSQL関数を示します。
次のリストには、デフォルトで無効になっているSQL関数(OFF
)が含まれています。 オプションとして有効化(ON
に変換)できます:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
親トピック: ネイティブ・セマンティクス
4.9.2 無効化可能なSQL関数
このトピックでは、無効にできるSQL関数について説明します。
次のSQL関数がデフォルトで有効になっています(ON
):
GROUPBY
-
HAVING
ORDERBY
WHERE
ORDERBY
は、ソート順序を制御します。ソート順序は、ソート・ロケーションによって異なる場合があります。 たとえば、ORDERBY
ON
の場合、DB2ソートは拡張バイナリ・コード化された10進数交換コード(EBCDIC)
ソート順)に基づきますが、ORDERBY
OFF
の場合、Oracleデータベース・ソートはASCIIソート順に基づきます。
その他の3つの関数GROUPBY
、HAVING
、およびWHERE
は、処理時間が長くなる可能性があります。 コストのかかるリソースの使用を最小化する場合、コストのかからないリソースで処理を実行するようにこれらの関数の設定を選択する必要があります。 また、前にリストした関数を無効化することもできます。
親トピック: ネイティブ・セマンティクス
4.9.3 SQLの集合演算子および句
WHERE
句とHAVING
句は、DRDAサーバーのすべてのバージョンと互換性があります。
つまり、これらの句は、変更されることなく処理のためにDRDAサーバーに渡されます。 句GROUP BY
およびORDER BY
をDRDAサーバーに渡すか、Oracleデータベースによって補正するかは、ネイティブ・セマンティクス・パラメータによって決まります(前の項を参照)。
集合演算子UNION
およびUNION ALL
は、DRDAサーバーのすべてのバージョンに対して互換性があります。つまり、DRDAサーバーに変更を加えずに処理に渡されます。 集合演算子INTERSECT
およびMINUS
は、DB2/UDBを除くすべてのバージョンのDRDAサーバーで補償されます。 DB2/UDB,の場合、INTERSECT
は互換性があり、MINUS
はEXCEPT
に変換されます。
親トピック: ネイティブ・セマンティクス