【问题标题】:How can I make ANSI encoded text file by using pl/sql?如何使用 pl/sql 制作 ANSI 编码的文本文件?
【发布时间】:2018-06-01 05:19:22
【问题描述】:

我目前正在制作一个使用 PL/SQL 创建文本文件的过程。

但是,文本文件仅以 UTF-8 编码。但由于在 MS Excel 中使用,我需要是 ANSI 编码的文本文件。 (如果在 Excel 中加载 UTF-8 文件,韩文字符会崩溃。)

enter image description here

以下是我的来源。

我该如何解决这个问题?


  CURSOR SQL_CUR IS
        SELECT DATA_S VAR_DATA
        FROM A_TABLE ;



V_FILE := PARAM_A_NUM || '_' || PARAM_C_NUM || '.TXT';

V_OUTPUT := UTL_FILE.FOPEN('DIRECTORY', V_FILE, 'w');

  FOR V_CUR IN SQL_CUR LOOP

    V_RESULT := V_CUR.VAR_DATA;
    UTL_FILE.PUT_LINE(V_OUTPUT, V_RESULT);

  END LOOP; 

UTL_FILE.FCLOSE(V_OUTPUT);

 EXCEPTION
  WHEN UTL_FILE.INVALID_PATH THEN 
    DBMS_OUTPUT.PUT_LINE('INVALID PATH');
  WHEN UTL_FILE.INVALID_MODE THEN
    DBMS_OUTPUT.PUT_LINE('INVALID MODE');
  WHEN UTL_FILE.INVALID_OPERATION THEN
    DBMS_OUTPUT.PUT_LINE('INVALID OPERATION');

【问题讨论】:

    标签: sql database oracle plsql


    【解决方案1】:

    当您使用 UTL_FILE.FOPEN 打开文件时,Oracle 会以数据库字符集打开文件,现在默认为 AL32UTF8

    之后使用外部应用程序更改文件的编码(例如 Java 工具 native2ascii)或使用 UTL_FILE.FOPEN(..., open_mode => 'wb') 以写入字节值。

    写作将是(未经测试):

    UTL_FILE.PUT_LINE(V_OUTPUT, CONVERT(V_RESULT, 'KO16MSWIN949'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2021-11-16
      相关资源
      最近更新 更多