機械翻訳について

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言語リファレンスを参照してください。

4.9.1 有効化可能なSQL関数

このトピックでは、有効にできるSQL関数を示します。

次のリストには、デフォルトで無効になっているSQL関数(OFF)が含まれています。 オプションとして有効化(ONに変換)できます:

ABS

ACOS

ASCII

ASIN

ATAN

ATAN2

BITAND

CAST

CEIL

CHR

CONVERT

COS

COSH

COUNTCOL

DECODE

DUMP

EXP

FLOOR

GREATEST

HEXOTRAW

INITCAP

INSTR

INSTRB

LEAST

LENGTH

LENGTHB

LN

LOG

LOWER

LPAD

LTRIM

MOD

NLS_INITCAP

NLS_UPPER

NLS_LOWER

NLSSORT

NVL2

POWER

RAWTOHEX

REPLACE

REVERSE

ROUND

RPAD

RTRIM

SIGN

SIN

SINH

SQRT

STDDEV

SUBSTR

SUBSTRB

TAN

TANH

TO_NUMBER

TRANSLATE

TRIM

TRUNC

UPPER

VARIANCE

VSIZE

4.9.2 無効化可能なSQL関数

このトピックでは、無効にできるSQL関数について説明します。

次のSQL関数がデフォルトで有効になっています(ON):

  • GROUPBY
  • HAVING
  • ORDERBY
  • WHERE

ORDERBY は、ソート順序を制御します。ソート順序は、ソート・ロケーションによって異なる場合があります。 たとえば、ORDERBY ONの場合、DB2ソートは拡張バイナリ・コード化された10進数交換コード(EBCDIC)ソート順)に基づきますが、ORDERBY OFFの場合、Oracleデータベース・ソートはASCIIソート順に基づきます。

その他の3つの関数GROUPBYHAVING、および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は互換性があり、MINUSEXCEPTに変換されます。