工作中需要将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没多久,比较急,先谢谢大家了。

解决方案 »

  1.   

    将oracle表生成为操作系统文件?
    -------------------------------
    用exp导出为dmp文件能满足要求吗。
      

  2.   

    应该不行吧,就是要生成txt的文本文件。谢谢了。
      

  3.   

    那就用ETL工具吧,像开源的kettleMSSQL的DTS也可以。
      

  4.   


    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> 
      

  5.   


    --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();
    }
      

  6.   

    SELECT CONVERT('Ä Ê Í Ó Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1') 
       FROM DUAL; CONVERT('ÄÊÍÓØABCDE' 
    --------------------- 
    A E I ? ? A B C D E ? 
      

  7.   

    UTL_RAW包里面也有一个:CONVERT Function 可以去试试