#oracle #plsql #utf-8 #ansi #utl-file
#Oracle #plsql #utf-8 #ansi #utl-файл
Вопрос:
Я хочу экспортировать свой файл в кодировке UTF8. Когда я проверил v $ nls_parameters, nls_characterset равен WE8ISO8859P9. Итак, кодировка моего файла — Ansii.
Как я могу экспортировать свой файл с кодировкой UTF8 без изменения параметров v $ nls_parameters?
DECLARE
v_os_touch_file utl_file.file_type;
p_in_file VARCHAR2(50);
BEGIN
v_os_touch_file := NULL;
p_in_file := NULL;
p_in_file := 'my_file_' || sysdate;
v_os_touch_file := utl_file.fopen(my_path, p_in_file, 'w');
FOR i IN (
SELECT
*
FROM
my_table
) LOOP
begin
utl_file.put_line(v_os_touch_file, 'TEST' );
utl_file.put_line(v_os_touch_file, i.input);
utl_file.fclose(v_os_touch_file);
END
Ответ №1:
Используйте UTL_FILE.FOPEN_NCHAR
Даже если содержимое буфера NVARCHAR2 может быть AL16UTF16 или UTF8 (в зависимости от национального набора символов базы данных), содержимое файла всегда считывается и записывается в UTF8. UTL_FILE при необходимости преобразует между UTF8 и AL16UTF16.
Обратите внимание, использование p_in_file := 'my_file_' || sysdate;
не очень разумно, поскольку оно зависит от настроек текущего сеанса пользователя NLS_DATE_FORMAT
. Представьте, что формат по умолчанию MM/DD/YYYY
равен .
Лучше использовать p_in_file := 'my_file_' || TO_CHAR(sysdate, 'YYYYMMDD');
, например.