使用UTF_FILE包,可以满足你的需要.

解决方案 »

  1.   

    楼上大神能否给写点,我不知道怎么写啊。
    网上找了一个,能否注释一下。DECLARE  
    OutputFile UTL_FILE.FILE_TYPE;  
    vart_title perd11.ART_TITLE%TYPE;  
    vart_author perd11.ART_AUTHOR%TYPE;  
    vart_keyWord perd11.ART_KEYWORD%TYPE;  
    vart_abstract perd11.ART_ABSTRACT%TYPE;  
    vart_abs1 perd11.ART_ABSTRACT%TYPE;  
    vart_abs2 perd11.ART_ABSTRACT%TYPE;  
    vart_authorinstitute perd11.ART_AUTHORINSTITUTE%TYPE;  
    vperd_volume perd11.PERD_VOLUME%TYPE;  
    vperd_issue perd11.PERD_ISSUE%TYPE;  
    vperd_date perd11.PERD_DATE%TYPE;  
    vpub_name perd11.PUB_NAME%TYPE;  
    vpub_issn perd11.PUB_ISSN%TYPE;  
    vclass_name perd11.CLASS_NAME%TYPE;  
     
    CURSOR cperd11 IS  
    select * from perd11;  
     
    BEGIN  
    OutputFile := UTL_FILE.FOPEN  
    (’/export/home/oracle/output’,'perd11.out’,'a’);  
    open cperd11;  
    LOOP  
    fetch cperd11 into vart_no,vart_title,  
    vart_author,vart_keyword,vart_abstract,  
    vart_authorinstitute,vperd_volume,  
    vperd_issue,vperd_date,vpub_name,  
    vpub_issn,vclass_name;  
    IF length(vart_abstract)>1000 THEN  
    vart_abs1:=substr(vart_abstract,0,1000);  
    vart_abs2:=substr(vart_abstract,1001);  
    ELSE  
    vart_abs1:=vart_abstract;  
    vart_abs2:=”;  
    END IF;  
    UTL_FILE.PUTF(OutputFile,’  
    【期刊类别】\n%s\n’,vclass_name);  
    UTL_FILE.PUTF(OutputFile,’  
    【期刊刊号】\n%s\n’,vpub_issn);  
    UTL_FILE.PUTF(OutputFile,’  
    【期刊名称】\n%s\n’,vpub_name);  
    UTL_FILE.PUTF(OutputFile,’  
    【期刊卷号】\n%s\n’,vperd_volume);  
    UTL_FILE.PUTF(OutputFile,’  
    【期刊期号】\n%s\n’,vperd_issue);  
    UTL_FILE.PUTF(OutputFile,’  
    【出版日期】\n%s\n’,vperd_date);  
    UTL_FILE.PUTF(OutputFile,’  
    【中文标题】\n%s\n’,vart_chntitle);  
    UTL_FILE.PUTF(OutputFile,’  
    【中文作者】\n%s\n’,vart_chnauthor);  
     
    UTL_FILE.PUTF(OutputFile,’  
    【作者单位】\n%s\n’,vart_authorinstitute);  
    UTL_FILE.PUTF(OutputFile,’  
    【中文要害词】\n%s\n’,vart_chnkeyword);  
    UTL_FILE.PUTF(OutputFile,’  
    【中文文摘】\n%s\n’,vart_engabs1);  
    UTL_FILE.PUTF(OutputFile,’  
    【中文文摘2】\n%s\n’,vart_engabs2);  
    UTL_FILE.FFLUSH(OutputFile);  
    exit when cperd11%NOTFOUND;  
    END LOOP;  
    close cperd11;  
     
    END;   
      

  2.   


    稍等一下... 给你在scott下面写一个,我会加上注释,你自己修改
      

  3.   


    --创建一个DIRECTORY UT 指向操作系统中的D盘目录(最好是用具有DBA权限的用户操作)
    CREATE DIRECTORY UT AS 'D:\';
    --授权读、写
    GRANT WRITE,READ ON DIRECTORY UT TO PUBLIC;
    --执行下面的PL/SQL块
    DECLARE
        V_F1 UTL_FILE.FILE_TYPE;
    BEGIN
        --外层循环得到内层循环BETWEEN的最小值和最大值
        FOR J IN (SELECT (LEVEL - 1) * 3000 MINVAL, LEVEL * 3000 MAXVAL
                    FROM DUAL
                  CONNECT BY LEVEL <=
                             (SELECT COUNT(1) FROM ALL_OBJECTS) / 10000 + 1) LOOP
            V_F1 := UTL_FILE.FOPEN('UT', 'DATA' || J.MAXVAL || '.TXT', 'W');
            --内层循环,获取需要导出的数据
            FOR I IN (SELECT T.OWNER, T.OBJECT_NAME
                        FROM (SELECT ALL_OBJECTS.*,ROW_NUMBER() OVER(ORDER BY OBJECT_NAME) RN FROM ALL_OBJECTS) T
                       WHERE RN BETWEEN J.MINVAL AND J.MAXVAL) LOOP
                 --行数据依次写入文件
                UTL_FILE.PUT_LINE(V_F1, I.OWNER || I.OBJECT_NAME);
            END LOOP;
            UTL_FILE.FCLOSE(V_F1);
        END LOOP;
    END;
      

  4.   

    就这几个点:
    1)V_F1 := UTL_FILE.FOPEN('UT', 'DATA' || J.MAXVAL || '.TXT', 'W');语句可以在UT目录下生成文件.
    2)UTL_FILE.PUT_LINE(V_F1, I.OWNER || I.OBJECT_NAME); 可以向你的HANDLE写入数据
    3)UTL_FILE.FCLOSE(V_F1); 可以用于关闭你持有的文件句柄.其他的都是循环啊,控制了什么的.
      

  5.   


    FOR I IN (SELECT T.OWNER, T.OBJECT_NAME
                        FROM (SELECT ALL_OBJECTS.*,ROW_NUMBER() OVER(ORDER BY OBJECT_NAME) RN FROM ALL_OBJECTS) T
                       WHERE RN BETWEEN J.MINVAL AND J.MAXVAL) LOOP
    这个语句就是我自己要查询的语句吗?改成我用的语句
      

  6.   

    搞定!!谢谢了。
    另外问一下,DIRECTORY能否创建excel文件? 如果把V_F1 := UTL_FILE.FOPEN('UT', 'DATA' || J.MAXVAL || '.TXT', 'W'); 这一句里面的.TXT改成  .XLS 行不行?
      

  7.   


    今天上午刚刚碰到这个问题,就是UTL_FILE操作EXCEL的问题,说句实话,我不知道能否可行.
    理论上是不可行的,因为EXCEL和TXT的编码方式毕竟不一样.
      

  8.   


    去查了下资料库,可以使用Oracle的java存储过程实现,使用UTL_FILE是不可行的.
      

  9.   

    具体是怎么实现的,我正好遇到这个问题,要分成几个文件导出了,然后王Greenplum导入