TRANSLATEは、stringサーバーがsource_repertoire_name.によって暗黙指定される型と一致しない場合は、暗黙の変換を実行します。
character_string_expressionの文字に、source_repertoire_name型の対応する文字がない場合、暗黙の変換ではエラーが発生します。この点は、WITH ERRORオプションを指定した場合でも、指定しなかった場合でも変わりません。
VantageはリテラルをUNICODEとして扱うため、例えば以下の関数は、文字列をUNICODEからまずLATINに変換してからLATINの文字列をKANJISJISに変換します。しかし、最後の文字がLATINレパートリーに入っていないため、この変換ではエラーが発生します。
... TRANSLATE('abc ' USING LATIN_TO_KanjiSJIS WITH ERROR) ...
エラー文字代入を実行してもかまわないのであれば、この問題を避けるために、以下の例のように、2つのレベルの変換を指定してください。
... TRANSLATE((TRANSLATE(_UNICODE 'abc' USING UNICODE_TO_LATIN WITH ERROR)) USING LATIN_TO_KanjiSJIS WITH ERROR)
例
関数 | 結果 | 結果のタイプ |
---|---|---|
TRANSLATE(‘abc ’ USING UNICODE_TO_LATIN) | 'abc' | VARCHAR(3) CHARACTER SET LATIN |
TRANSLATE('abc' USING UNICODE_TO_UNICODE_Fullwidth) | 'abc' | VARCHAR(3) CHARACTER SET UNICODE |
TRANSLATE('abc ' USING UNICODE_TO_LATIN WITH ERROR) εは、 LATIN(0x1A)の指定のエラー文字を表わします。 |
'abcε ' | VARCHAR(4) CHARACTER SET LATIN |