oracle,一张表里的数据有亿条,请问如何将这些数据导出成一个一个的文本文件?

解决方案 »

  1.   

    参考:
    Oracle数据直接导出到文本文件的方法
    http://www.builder.com.cn/2007/1005/536616.shtml
      

  2.   

    我不想将这么多数据导成一个文件,因为一个文件太大了打不开,有没有好的办法导成多个文本(.txt)文件?
      

  3.   

    参考如下方法:
    DECLARE
      CURSOR L_V IS
        SELECT VIEW_NAME, S.TEXT_LENGTH FROM USER_VIEWS S;
      L_F       UTL_FILE.FILE_TYPE;
      L_NUM     INT DEFAULT 0;
      L_MAXSIZE INT DEFAULT 5000; --每个文件可以存储的记录数
      L_FILENO  INT DEFAULT 1;
    BEGIN  FOR I IN L_V LOOP
        IF MOD(L_NUM, L_MAXSIZE) = 0 THEN
          IF L_FILENO > 0 THEN
            UTL_FILE.FCLOSE(L_F);
          END IF;
          L_F      := UTL_FILE.FOPEN('TEST',
                                     'xx' || L_FILENO || '.txt',
                                     'w',
                                     32767);
          L_FILENO := L_FILENO + 1;
        END IF;
        UTL_FILE.PUT_LINE(L_F, I.VIEW_NAME || ',' || I.TEXT_LENGTH);
        L_NUM := L_NUM + 1;
      END LOOP;
      UTL_FILE.FCLOSE(L_F);
    END;
    /
      

  4.   


    不好意思,这几天才把数据导进去
    数据量是1亿多条,我就一张表users,一个字段username(主键)
    现在要把这些数据导成多个文本文件,按照一楼的意思我写成这样执行:
    sool d:\d.txt
    set heading off
    set feedback off
    select username from users where rownum<10000;
    spool off;
    将上面的代码在sql plus上执行
    后来我发现有几个问题:
    第一:select username from users where rownum<10000;与select username from users where rownum<100;这两条语句查出来的前一百条数据根本上就对不上,不是一样的,也就是说到时我循环导出时,修改rownum<10000中值的大小时,这样导出来的数据有可以是重复的;
    第二:这个循环怎么写啊,生成不同的文件
    5楼的那些语句能不能做个注释啊?看不懂
      

  5.   

    L_FILENO  的默认值应该是0吧。