5

テキスト ファイルを clob としてデータベースにロードする際に問題が発生しました。

  • Oracle バージョン: Oracle データベース 11g EE リリース 11.2.0.2.0
  • NLS_LANG: RUSSIAN_RUSSIA.CL8MSWIN1251
  • NLS_CHARACTERSET: AL32UTF8

テキストファイルをロードするコード:

DECLARE
L_BFILE BFILE;
L_CLOB  CLOB;
file_name VARCHAR2(300);

BEGIN
   file_name := 'test.txt';
   L_BFILE := BFILENAME('DIR', file_name);
   if (dbms_lob.fileexists(l_bfile) = 1) then
      INSERT INTO TEST T
      VALUES (SEQ_TEST.NEXTVAL, EMPTY_CLOB(),file_name) return r_data into l_clob;
      L_BFILE := BFILENAME('DIR', file_name);
      DBMS_LOB.FILEOPEN(L_BFILE, DBMS_LOB.FILE_READONLY);
      DBMS_LOB.LOADFROMFILE(L_CLOB, L_BFILE, DBMS_LOB.GETLENGTH(L_BFILE));
      DBMS_LOB.FILECLOSE(L_BFILE);
      COMMIT;
   end if;   
END;

テキストファイルはUTF8です。データベースにロードした後、select を実行して、ロシア語の文字の代わりに四角形を取得します。助けてください!

4

1 に答える 1

3

LOADFROMFILEの代わりにLOADCLOBFROMFILEを試してください。

マニュアルから:

注: 文字セットが可変幅 (UTF-8 など) の場合、LOB 値は固定幅の UCS2 形式で保管されます。したがって、DBMS_LOB.LOADFROMFILE を使用している場合、BFILE のデータは UTF-8 キャラクタ セットではなく UCS2 キャラクタ セットである必要があります。ただし、データをCLOBまたはNCLOBにロードするには、LOADFROMFILEのかわりにsql*loaderを使用する必要があります。これは、sql*loaderが必要なキャラクタ・セット変換を提供するためです。

于 2013-07-20T16:24:45.030 に答える