一般的に、EQLが型の昇格を実行するのは、情報消失のリスクがないときです。
場合によっては、EQLは自動的な値の昇格を整数に対して(doubleへ)、および文字列に対して(管理対象属性値へ)サポートします。
整数の昇格
整数からdoubleへの昇格が発生するのは、次のコンテキストです。
- COALESCE式のコール時に、引数で整数とdoubleが混在している場合。
- 次に示す演算子のコール時に、引数で整数とdoubleが混在している場合。
+ - * = <>
- 次に示す関数に対する整数の引数は常に、doubleに変換されます。
- /(除算演算子、duration引数は変換されないことに注意してください)
- CEIL
- COS
- EXP
- FLOOR
- LN
- LOG
- SIN
- MOD
- POWER
- SIN
- SQRT
- TAN
- TO_GEOCODE
- TRUNC
- CASE式の中の句から返される結果で整数とdoubleが混在している場合は、整数がdoubleに昇格されます。
たとえば、1 + 3.5という式では、1が整数で3.5がdoubleです。この整数値はdoubleに昇格されて、全体の結果は4.5になります。
前述以外のコンテキストでは、自動的な型昇格は実行されず、明示的な変換が必要になります。たとえば、Quantityが整数でSingleOrderがブール型の場合は、次に示すような式は許可されません。
COALESCE(Quantity, SingleOrder)
次に示すような、ブール型から整数への明示的な変換が必要です。
COALESCE(Quantity, TO_INTEGER(SingleOrder))
文字列の昇格
文字列も、管理対象属性値への昇格が可能です。この文字列は文字列リテラルである必要があります。文字列を生成する、それ以外の種類の式は変換されません。
文字列の昇格が適用されるのは、次の関数のコール時に引数で文字列と管理対象属性が混在している場合です。
- CASE
- COALESCE
- GET_LCA
- IS_ANCESTOR
- IS_DESCENDANT
たとえば、CASE式の中で、ある句が生成する値が管理対象属性階層で、他の句が生成するのが文字列リテラルである場合は、文字列リテラルが自動的にその階層内の値に変換されます。
前述の関数すべてについて、すべての管理対象属性引数が同じ階層からのものであることが必要です。