この関数を使用してdump()
、文字列内の各文字の数値表現を10進数または16進数で表示できるため、印刷できない文字を確認できます。
select dump(<some string>) from dual;
dump
呼び出し内で直接呼び出すことはできませんdbms_output
。SQLステートメント(PLS-00204)でのみ使用できますが、別の変数に割り当てて、次のように表示することはできます。
declare
...
buffer_dump varchar2(4000);
begin
...
utl_file.get_line(file_handle, buffer);
select dump(buffer) into buffer_dump from dual;
dbms_output.put_line(buffer_dump);
...
CSVファイルを扱っているので、Windowsスタイルのラインターミネーター(CRLF)がありget_line()
、結果にキャリッジリターンが含まれていると推測するのが妥当かもしれません。これは、最後の余分な文字で示されます。13
(10進ASCII)で表されます。
declare
buffer varchar2(4000);
buffer_dump varchar2(4000);
begin
buffer := 'Field1,Field2^M'; -- terminated with \r
select dump(buffer) into buffer_dump from dual;
dbms_output.put_line(buffer_dump);
end;
/
Typ=1 Len=14: 70,105,101,108,100,49,44,70,105,101,108,100,50,13
その場合は、、、、または-自分で見つけたように-正規表現を使用して削除できreplace(<string>, chr(13), '')
ますtrim(trailing chr(13) from <string>
。
...
buffer := trim(trailing chr(13) from buffer);
select dump(buffer) into buffer_dump from dual;
dbms_output.put_line(buffer_dump);
...
Typ=1 Len=13: 70,105,101,108,100,49,44,70,105,101,108,100,50