生の文字列があり、それを varchar2 にキャストしてから生にキャストし直しても、元の情報はすべて残っています。ただし、それを varchar2 にキャストしてから (空の文字列を含む) 何かを連結すると、最後の文字が失われます。これは私がそれを複製するために使用しているコードです:
SET SERVEROUTPUT ON;
DECLARE
raw_string RAW(100);
v_string VARCHAR2(100);
raw_string2 RAW(100);
BEGIN
raw_string := 'C5C6C7';
v_string := utl_raw.cast_to_varchar2(raw_string);
dbms_output.put_line('Raw string: ' || utl_raw.cast_to_raw(v_string) );
v_string := v_string || '';
dbms_output.put_line('New raw string: ' || utl_raw.cast_to_raw(v_string) );
END;
/
11 行目と 13 行目の唯一の違いは、v_string が空の文字列と連結された後に 13 行目が実行されることです。しかし、出力は次のとおりです。
Raw string: C5C6C7
New raw string: C5C6
新しい生の文字列は、何も連結しなければ同じですが、文字列の前に何かを追加すると、最後の部分が失われます。特定のキャラクターでのみ発生します。raw を '61' (小文字の 'a') で終了しても、何も失われません。
Oracle SQL Developer v.3.2.20.09 を使用しています
これはしばらくの間私を混乱させてきました。何かが欠けているのか、それとも単なるバグなのかわかりませんが、助けていただければ幸いです。