ORACLE 借助utl_file使用存储过程将oracle表中的数据导出成文本文件

ORACLE 借助utl_file使用存储过程将oracle表中的数据导出成文本文件


2024年4月28日发(作者:)

ORACLE 借助utl_file使用存储过程将oracle表中的数据导出成文本文件

摘要:在使用数据库的过程中,我们经常会遇到一个问题:如何将数据按照

想要的格式导出到一个文本文件中。当然,我们可以通过编写一些应用程序或通

过第三方的软件工具来解决这个问题,但是其效率和灵活性并不一定是最优的解

决方案。本文就探讨使用数据库管理系统自身的功能来实现以上的需求。本文研

究的实验环境为Oracle 9i数据库系统,操作系统为Sun Solaris 10。

关键词:Oracle数据库;数据导出;数据文件;导出方法

1.引言

数据库已经应用比较普遍,目前

各类系统的开发几乎都离不开数据

库管理系统的支撑,当前占数据库管

理系统市场较大份额的有Oracle、

DB2、SQL Server等。在使用数据库

的过程中,难免会有将数据表中的数

据导出这样的需求,特别是一些企业

应用需要经常性的提取一些业务数

据作为分析决策的参考,而这些提取

数据的需求又具有格式经常变化等

特点,如果单纯依靠编写应用程序就

会显得很麻烦,成本也较大。第三方

工具因为需要另外安装等不方便的

原因,所以也很难满足要求。因此需

要利用数据库自身的工具或功能来

实现数据表数据的提取。

create table test

(

2.本文约定的实验环境

Oracle 9i是由甲骨文(Oracle)

公司出品的一款企业级数据库管理

系统,目前最新的版本是11g,但9i

版本应用比较普遍,主要应用于电

信、公安等行业的数据库管理。

Solaris 10 是由太阳(SUN)公司出

品的一种UNIX操作系统,因为其稳

定性及安全性较好,在一些大型的企

业级应用中也比较广泛。

文中约定实验环境中的

Oracle9i的服务名(SID)为example,

其管理员用户(sys)的口令为

passwd,普通用户的用户名为user,

其口令为userpwd,在user用户方案

下存在一个数据库表,其表结构如

下:

id number(1),

name varchar2(20),

address varchar2(20)

);

向表中插入一些初始化数据,内容如下:

insert into test values(1,'wanglp','sy');

insert into test values(2,'gaoliang','dl');

insert into test values(3,'fuyaxian','as');

insert into test values(4,'wangtong','bx');

insert into test values(5,'gaoqi','dd');

最终实验输出的文本文件的内容及格式如下:

1|wanglp|sy

2|gaoliang|dl

3|fuyaxian|as

4|wangtong|bx

5|gaoqi|dd

3.实验过程

接下来将采用两种方法来实现

数据输出到文本的功能。

方法一:使用Oracle SQL/Plus

的 Spool工具

set heading off

set echo off

set term off

set line 0

set pages 0

set feed off

spool /export/home2/

第一步:建立脚本文件,在磁盘

上建立一个以sql为扩展名的文本文

件(),这里约定存放在

“/export/home2/”路径下编辑内容

如下:

select id||'|'||name||'|'||address as newcloumn from test;

spool off

set heading on

set echo on

set term on

set feed on

第二步:执行脚本,得到输出数据文件。

登录Oracle 的SQL/PLUS工具,并执行脚本文件。

sqlplus user/userpwd@example

SQL>@/export/home2/script

运行成功后,即可在/export/home2/目录下找到文件。

图1 操作示意图

* 说明:方法一比较简单,只要安装了Oracle数据库的SQL/PLUS客户端工具,

就可以在本地客户端或者远程数据库服务器端生成数据文件。

方法二:使用Oracle内置的函数包UTL_FILE

第一步:在SQL/PLUS中使用sys用户登录到数据库

sqlplus user/userpwd@example

SQL>conn sys/passwd@example as sysdba

第二步:设置输出目录

SQL> create or replace directory TMP as '/export/home2/';

第三步:授权user用户对该目录的访问权限

SQL> grant read,write on directory TMP to user;

第四步:使用user用户登录到数据库

SQL> conn user/userpwd;

第五步:建立Oracle数据库程序包及程序包体(或存储过程),这里把程序

包及包体的内容存储到/export/home2/文件中。

--建立程序包

create or replace package wlptest

AS

procedure START_OUT;

end wlptest;

/

--建立程序包体

create or replace package body wlptest

AS

OutputFile UTL__TYPE; --输出文件对象

type struct_records is record(

id number(1),

name varchar2(20),

address varchar2(20)

);

logtemp struct_records;

CURSOR log_cursor IS

select id,name,address from test;

PROCEDURE START_OUT

AS

BEGIN

OutputFile := UTL_('TMP','','a');

DBMS__LINE('***BEGIN TO EXPORT DATA!***');

OPEN log_cursor;

loop

fetch log_cursor into logtemp;

exit when log_cursor%notfound;

UTL_(OutputFile,'%s|%s|%sn',,

,s);

END loop;

CLOSE log_cursor;

DBMS__LINE('***FINISHED EXPORT DATA!***');

UTL_(OutputFile);

UTL_(OutputFile);

END START_OUT;

END wlptest;

/

show errors;

执行创建及编译包及包体

SQL> @/export/home2/

第六步:执行程序包,生成数据文件。

SQL> set serverout on

SQL> exec _OUT;

4.结论

本文所提出的实验方法,使导出

数据表文件的工作变得非常简单,不

需要编写应用程序,也不需要使用第

三方的软件工具,保证了以最高的效

率得到想要的数据导出文件,具有较

强的实际意义。

文中提供的两种导出方法,各有

优点:方法一可以在数据库服务器端

或客户端生成结果文件,方法二虽然

只能在数据库服务器端生成结果文

件,但可以经过进一步的改造完成一

个数据导出小模块,供第三方进行很

方便的调用。我们需要根据具体的环

境和情况来选择合理使用哪种方法。

参考文献

[1]

Thomas Kyte .Expert Oracle Database

Architecture 9i and 10g Programming

Techniques and Solutions

,2006.


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714284646a2417086.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信