工作中需要将oracle中一张表的某些字段取出存为操作系统文件。打算采用的方法是利用utl_file写文件,但现在的问题要保存的文件格式为utf-16,而数据库的字符集是al32utf8,nls字符集是al16utf16。操作系统是linux as5,其nls_lang是utf8。表的字段是varchar2。我是用put_line函数,但是导出的文件还是utf8格式。用了convert(str,"al16utf16","al32utf8")后,虽然可以转化为utf16,但是还是有问题,是小端还是大端不记得了,反正还是不能用。用put_line_nchar对nvarchar2操作总是报错。请教各位高手几个问题:1,oracle是否有将utf-8转换为utf-16的函数或别的方法,或者大小端转换的函数。查了一些oracle文档,没有找到。2,不用utf_file文件操作,是否还有其他pl/sql的方法可将oracle表生成为操作系统文件?刚刚接触oracle没多久,比较急,先谢谢大家了。
-------------------------------
用exp导出为dmp文件能满足要求吗。
SQL> spool c:\zhai.txt
Started spooling to c:\zhai.txt
SQL> select sysdate from dual;
SYSDATE
-----------
2009-11-27
SQL> spool off;
Stopped spooling to c:\zhai.txt
SQL>
--c++代码
#include <fstream>
// 将保存的文件名由相对路径转化绝对路径
string sPath = ExtractFilePath(Application->ExeName).c_str();
string sSaveFieldName = sPath + CONST_STR_SavedField_FileName;
sSaveFieldName = (ExpandFileName(sSaveFieldName.c_str())).c_str(); // 保存到文件
ofstream ofs;
ofs.open(sSaveFieldName.c_str());
if (ofs.is_open())
{
try
{
ofs << sField;
}
catch(...)
{
}
ofs.close();
}
FROM DUAL; CONVERT('ÄÊÍÓØABCDE'
---------------------
A E I ? ? A B C D E ?