16 進数の文字列値 (AF または af または 0-9 とこのパターンの組み合わせのみを含む) を検証する必要があります。私はさまざまなフォーラムと SO も検索しましたが、いくつかの解決策を見つけましたが、どれも満足のいくものではなく、ある時点で適切な結果が得られないものもあります。以下にいくつかのサンプルを示します。
translate(upper(<VALUE-TO-CHECK>), '0123456789ABCDEF', '.') != '..'
上記のコードは、値 '1234567890ABCDEF' または '000000' または '100000' などに対して誤った結果を返しています。
REGEXP_LIKE(LTRIM(RTRIM(<VALUE-TO-CHECK>)), '[a-f|A-F|0-9].*');
上記のコードは、値「Q1W」に対して誤った結果を示しています
hex_num := TO_NUMBER(<VALUE-TO-CHECK>, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
EXCEPTION
WHEN value_error THEN -- When value_error that means not convertible to HEX value
RETURN FALSE;
上記のコードは、64 バイト長の 16 進文字値、つまり「CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC」に対して誤った結果を返しています。
誰でも16進数値を検証するのを手伝ってくれますか?