建立一个JOB,定时将查询到的结果导出为txt文件,请教语句。

解决方案 »

  1.   

    用sqlplus命令可以做到。windows计划任务,bat文件调用.sql文件,.sql文件里set格式化,用spool输出。
    Linux/Unix更方便,crontab直接调用一个sh文件,里面写上sql,格式化后spool输出。
      

  2.   

    spool回复内容太短了! 
      

  3.   

    利用存储过程将表中数据导出到.txt文件
    看昨天论坛里有一个人问的,给写的一个例子,这里边假设表中只有字符型,数值型,日期型数据了,有投机取巧的嫌疑    --*********************************************************************
    --***
    --***首先以dba或者是其他具有create directory的用户创建directory,然后授权
    --***
    --*********************************************************************
    CREATE OR REPLACE DIRECTORY dir_jiang AS 'd:\oracle';
    GRANT read,write ON directory dir_jiang TO scott;--*********************************************************************
    --***
    --***执行导出文本文件的存储过程:p_exp
    --***p_tname:要导出的表明;p_query:where条件,根据这个条件导出,如果为null,则全表导出
    --***
    --***
    --*********************************************************************
    create or replace procedure p_exp(p_tname varchar2,p_query varchar2)
    as
      v_line   varchar2(2000);                       --记录的数据
      v_sql    varchar2(2000);                       --动态sql变量
      v_fname  varchar2(40);                         --导出数据的文件名字
      cursor cursor_column                           --游标:通过数据字典查找出表有哪些字段
             is select column_name,data_type 
             from user_tab_columns where table_name=upper(p_tname);
      type type_cursor is ref cursor ; 
      mycursor type_cursor; 
      outf utl_file.file_type;
      
    begin
      v_fname:=p_tname||'.txt';
      for col in cursor_column loop
         if col.data_type='DATE' then
              v_sql:=v_sql||'to_char('||col.column_name||',''yyyy-mm-dd-hh24:mi:ss'')'||'||chr(9)||';
         else
              v_sql:=v_sql||col.column_name||'||chr(9)||';
         end if;
      end loop;
      v_sql:=rtrim(v_sql,'||chr(9)||');
      v_sql:='select '||v_sql||' from '||p_tname||' '||p_query;
      dbms_output.put_line(v_sql);
      outf:=utl_file.fopen('DIR_JIANG',v_fname,'w');
      open mycursor for v_sql;
      loop 
        fetch mycursor into v_line;     
        exit when mycursor%notfound; 
        utl_file.put_line(outf,v_line);
      end loop;
      utl_file.fclose(outf);
      dbms_output.put_line('导出成功');
    end;http://www.itpub.net/thread-541631-1-1.html
      

  4.   

    spool 导出记录,不够效率很低,我曾经想导出100万,导出的时间很长
      

  5.   

    就是使用utl_file对数据做定时输出
      

  6.   

    用spool吧如果要效率更高的就不知道了我自己导数据是用程序导,自己写的一个导数据的小工具lz有需要我可以发给你不过相信网上有更专业的