UTL_RAW.TRANSLATE は、RAW タイプのデータをバイトごとに変換するためのバイト単位の翻訳関数です。
構文
UTL_RAW.TRANSLATE (
r IN RAW,
from_set IN RAW,
to_set IN RAW
) RETURN RAW;
パラメータの説明
| パラメータ | 説明 |
|---|---|
| r | ソースのバイト文字列。 |
| from_set | 検索および置換するバイトセット。 |
| to_set | 置き換え先のバイトセット。 |
使用方法
ソース文字列 r の値をバイトごとにスキャンします:
- その値が
from_set内にある場合、to_set内の対応する位置のバイトで置き換えます。 - バイトが
from_set内にない場合、結果に直接コピーします。 from_set内のバイトにto_set内の対応する項目がない場合、そのバイトは削除されます。from_setがto_setより長い場合、余分なfrom_setバイトに対応する翻訳がないため、マッチしたバイトは削除されます。to_setがfrom_setより長い場合、余分なto_setバイトは無視されます。from_set内に重複するバイトがある場合、重複するバイトは無視されます(同一バイトがfrom_set内で2回目に現れた場合、その対応関係は無視されます)。- 3つのパラメータのうち
NULL値または長さが0の場合、ValueErrorエラーが報告されます。 - 文字列の長さが奇数の場合、処理時に左端に
0を補います。
使用例
以下のコマンドを実行して、UTL_RAW.TRANSLATE 関数を使用して、入力バイトシーケンス内の特定の文字をすべて F に置き換え、他の文字はそのまま保持します。
obclient> SELECT UTL_RAW.TRANSLATE('1236567812125612344434341234567890ABAA1234','12AA34','FFFFFF') FROM dual;
実行結果は次のとおりです:
+-----------------------------------------------------------------------------------+
| UTL_RAW.TRANSLATE('1236567812125612344434341234567890ABAA1234','12AA34','FFFFFF') |
+-----------------------------------------------------------------------------------+
| FF365678FFFF56FFFF44FFFFFFFF567890ABFFFFFF |
+-----------------------------------------------------------------------------------+