我在Windows 7上使用Oracle 11g,国家字符集等于AL16UTF16。
我试图用下面的PL / SQL代码写3个西里尔字母:
declare
s nvarchar2(3):=nchr(1040) || nchr(1041) || nchr(1042);
fileHandler UTL_FILE.FILE_TYPE;
begin
fileHandler := UTL_FILE.FOPEN_NCHAR('TEMP', 'test.txt', 'W');
UTL_FILE.PUT_NCHAR(fileHandler,s);
UTL_FILE.FCLOSE(fileHandler);
end;
生成的文件长度为5个字节。如果我在Notepad ++中打开文件,我可以看到以下内容: DLE DC1 DC2最后有新行(字符13 +字符10)。上面的代码出了什么问题?
答案 0 :(得分:0)
在文本模式下,UTL_FILE中的行终止有很多魔力。 如果您将使用其他操作系统,您可能会遇到不同的行为。
要避免它,您可以使用带转换的二进制模式
fileHandler := UTL_FILE.FOPEN('TEMP', 'test.txt', 'wb');
UTL_FILE.PUT_RAW (fileHandler, utl_raw.cast_to_raw(s));