我目前正在制作一个使用PL / SQL创建文本文件的过程。
但是,文本文件仅编码为UTF-8。但由于在MS Excel中使用,我需要成为ANSI编码的文本文件。 (如果在Excel上加载了UTF-8文件,则会丢失韩文字符。)
以下是我的来源。
我该如何解决这个问题?
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');
答案 0 :(得分:0)
当您使用UTL_FILE.FOPEN
打开文件时,Oracle会打开数据库字符集中的文件,现在默认为AL32UTF8
。
之后使用外部应用程序更改文件的编码(例如,Java工具native2ascii)或使用UTL_FILE.FOPEN(..., open_mode => 'wb')
来编写字节值。
写作(未经测试):
UTL_FILE.PUT_LINE(V_OUTPUT, CONVERT(V_RESULT, 'KO16MSWIN949'));