C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

PL/SQLのファイル読み込みに関して

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■95043 / inTopicNo.1)  PL/SQLのファイル読み込みに関して
  
□投稿者/ Info_kawa (1回)-(2020/06/17(Wed) 17:20:57)

分類:[データベース全般] 

Osバージョン:Windows Server2016
Oracleバージョン:11.2.0.2.0
PL/SQL実行環境:Object Browser Ver10

上記の環境において以下のようにCSVファイルを作成しました。

CSVのファイル形式(sakuraエディタで作成)
 文字コードセット:UnicodeBE
 CP:なし
 BOM:なし
 改行コード:変換なし
 

データは以下のようなものです。
1234,不明,AAAAA,BBBBB,CCCCC,DDDDD
1235,男,AAAAA,BBBBB,CCCCC,DDDDD
1236,女,AAAAA,BBBBB,CCCCC,DDDDD
1237,不明,AAAAA,BBBBB,CCCCC,DDDDD


PL/SQLでUTF16のファイルをUTF8に変換し、
テーブルにINSERTしようとしているのですが、
失敗してしまうので、DBMS_OUTPUTで出力
されたデータを確認したのですが、変数VBUFに
何も入っておらずプログラム内の
EXIT WHEN VBUF IS NULL;
で終了していました。
データを色々変えて試していくと
どうも"不"の文字を読み込もうとすると
NULLになるようで
"不明"から"不"を除いて"明"だけにすると
正常にデータを読み込みます。
このような現象の対策を知っている方が
いらっしゃいましたらご教示のほどよろしくお願いいたします。

補足:Exception(Oracle Error)は発生してません。

-- ******** プログラム抜粋 ********
FHANDLE  UTIL_FILE.FILE_TYPE;
VBUF     VARCHAR2(8092);

BEGIN
  UTL_FILE.FOPEN(該当ファイルのパス,該当ファイル,'R',32767);
  UTL_FILE.GET_LINE(FHANDLE,VBUF);

  VBUF := CONVERT(VBUF,'UTF8','AL16UTF16');
  
  -- デバッグ用
  DBMS_OUTPUT_PUT_LINE('VBUF = '|| VBUF);


EXCEPTION
  WHEN NO_DATA_FOUND THEN
    EXIT;
  END;
  
  EXIT WHEN VBUF IS NULL;
  


引用返信 編集キー/
■95045 / inTopicNo.2)  Re[1]: PL/SQLのファイル読み込みに関して
□投稿者/ furu (50回)-(2020/06/17(Wed) 18:07:40)
No95043 (Info_kawa さん) に返信
CONVERT関数は言語リファレンスで
使用しないことをお薦めされています。

UTL_FILE.FOPENは使用したことないのですが
リファレンスには
  テキスト・モードでオープンされるファイルは
  データベースのキャラクタ・セットにエンコードされます。
と書かれていますので
変換の必要がないのではないでしょうか。

引用返信 編集キー/
■95046 / inTopicNo.3)  Re[2]: PL/SQLのファイル読み込みに関して
□投稿者/ Info_kawa (3回)-(2020/06/17(Wed) 18:42:43)
furu様

回答ありがとうございます。

UTL_FILE.FOPEN(該当ファイルのパス,該当ファイル,'R',32767);
の所で、3番めのパラメータのオープンモードがR:テキストの読み込み
となっているので、データベースのキャラクタ・セットにエンコードされると
思い、CONVERTを外してみたのですが、UTF8に変換されませんでした。
(NLS_CHARRACTERSETはUTF8です。)
引用返信 編集キー/
■95083 / inTopicNo.4)  Re[3]: PL/SQLのファイル読み込みに関して
□投稿者/ Info_kawa (4回)-(2020/06/22(Mon) 18:27:06)
現在の所、解決には至っていませんが、一旦解決済みとさせていただきます。
(可能であればOracleサポートに問い合わせてみます。)

回答を頂いた方、ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ