利用存储过程将表中数据导出到.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
Linux/Unix更方便,crontab直接调用一个sh文件,里面写上sql,格式化后spool输出。
看昨天论坛里有一个人问的,给写的一个例子,这里边假设表中只有字符型,数值型,日期型数据了,有投机取巧的嫌疑 --*********************************************************************
--***
--***首先以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