将ORACLE9数据库表内容输出到文本文件的两种方法(SPOOL / UTL_FILE)

quchch 2006-10-19 01:24:49
URL:http://blog.tom.com/blog/read.php?bloggerid=166999&blogid=50642
数据库服务名为:cncworks
数据库sys用户密码为:gesys
数据库simpdba(普通用户)密码为:well

现有一个数据库表:
create table simpdba.test
(
id number(1),
name varchar2(20),
address varchar2(20)
);
内容如下:
insert into simpdba.test values(1,'quchch','sy');
insert into simpdba.test values(2,'chenwen','dl');
insert into simpdba.test values(3,'wangbh','xj');
insert into simpdba.test values(4,'liuliang','sx');
insert into simpdba.test values(5,'liben','jl');
COMMIT;


希望在硬盘D:out下输出一个文件a.txt,内容格式如下:
1|quchch|sy
2|chenwen|dl
3|wangbh|xj
4|liuliang|sx
5|liben|jl


方法一:利用SQL/PLUS的SPOOL
1、建立一个文件D:ex.sql内容如下
set heading off
set echo off
set term off
set line 0
set pages 0
set feed off
spool d:outa.txt
select id||'|'||name||'|'||address as newcloumn from test;
spool off;
set heading on
set echo on
set term on
set feed on
2、在CMD控制台打开SQL PLUS
输入sqlplus simpdba/well@cncworks
成功登录后,输入命令:
SQL>@D:ex.SQL

运行成功后,即可在D:outa.txt中看到输出内容。
#说明:此文件可生成于客户端或者数据库服务器端。





方法二:利用UTF_FILE
1、用sys用户登录到数据库:
sqlplus simpdba/well@cncworks
conn sys/gesys@cncworks as sysdba
2、在sqlplus中运行
create or replace directory TMP as 'd:out';
3、授权
grant read, write on directory TMP to simpdba;
4、用普通用户登录到数据库
conn simpdba/well@cncworks
5、建立包及包体(或者存储过程)
这里把它存储到D:pro.sql
执行SQL>@D:pro.sql
create or replace package QUCHCH
AS
procedure START_OUT;
end QUCHCH;
/
show errors;

create or replace package body QUCHCH
AS
OutputFile UTL_FILE.FILE_TYPE; --输出文件对象
type struct_records is record(
id number(38),
name varchar2(38),
address varchar2(38)
);
logtemp struct_records;
CURSOR log_cursor IS select id,name,address from test;

PROCEDURE START_OUT
AS
BEGIN
--生成日志文件。保存在数据库服务器“D:out”目录下,文件名“b.txt”
OutputFile := UTL_FILE.FOPEN('TMP','b.txt','a');
DBMS_OUTPUT.PUT_LINE('***BEGIN TO EXPORT DATA!***');
OPEN log_cursor;
loop
fetch log_cursor into logtemp;
exit when log_cursor%notfound;
UTL_FILE.PUTF(OutputFile,'%s|%s|%sn',logtemp.id,logtemp.name,logtemp.address);
END loop;
CLOSE log_cursor;
DBMS_OUTPUT.PUT_LINE('***FINISHED EXPORT DATA!***');
UTL_FILE.FFLUSH(OutputFile);
UTL_FILE.fclose(OutputFile);
END START_OUT;
END QUCHCH;
/
show errors;

6、执行

SQL>set serverout on
SQL>exec quchch.START_OUT;


详细信息请访问:http://blog.tom.com/blog/read.php?bloggerid=166999&blogid=50642
...全文
594 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eric_1999 2006-10-19
  • 打赏
  • 举报
回复
UP~~~~~
lz共享精神very good~~~

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧