oracle 导出数据 utl,【原创】利用utl_file包进行表数据导出
利用utl_file包进行表数据导出
2013/11/12
一、概述
工作中需要将许多表的数据导出到一份excel中,虽然PL/SQL自带有导出的功能,但是导出后需要进行手动的汇总到一张excel中,比较耗时。此时就可以利用oracle自带的utl_file包完成此工作。它可以将不同表的相关数据导出到一张excel里,省去了后续的工作。
------------------------------------------------------------------------------------
二、实验步骤
1.导入utl_file包。
以sys用户在command窗口执行如下SQL脚本即可。
utlfile.sql
2.建立文件导出目录并赋予读写权限
create or replace directory data_out as 'd:\';
grant read ,write on directory data_out to scott;
3.对scott用户赋予执行utl_file包的权限。
grant execute on utl_file to scott;
4.修改utl_file_dir参数,此参数为静态参数,然后重启数据库。
alter system set utl_file_dir = 'd:\' scope = spfile;
5.创建存储过程进行表数据导出
create or replace procedure
export_2_excel(pfile_name in varchar2,
--输出文件名
pexport_sql in varchar2) --执行的sql语句 ‘select
empno||chr(9),ename||chr(9) from emp’
--chr(9)是制表符。
as
--存储记录的对象类型
type content_record_type is record(
empno
varchar2(25),
ename
varchar2(25),
job varchar2(25),
sal varchar2(25));
content_re content_record_type;
--建立游标
type cur_content is ref cursor;
c_content cur_content;
l_file utl_file.file_type; --建立操作文件的句柄
begin
l_file := utl_file.fopen('d:\', pfile_name ||
'.xls', 'w'); --打开文件'
utl_file.put_line(l_file,
'empno' || chr(9) || 'ename' || chr(9) || 'job' ||
chr(9) || 'sal'); --输出标头
open c_content for pexport_sql; --打开游标
loop
fetch
c_content
into content_re.empno,
content_re.ename,
content_re.job,
content_re.sal;
exit when
c_content%notfound;
utl_file.put(l_file, content_re.empno);
utl_file.put(l_file, content_re.ename);
utl_file.put(l_file, content_re.job);
utl_file.put_line(l_file, content_re.sal);
end loop;
close c_content;
UTL_FILE.FFLUSH (l_file);--确保缓存已经写入文件。
utl_file.fclose(l_file); --关闭句柄,一定不能忘!!!
end;
----------------------------------------------------------
附:utl_file包的介绍
utl_file包的应用是非常广泛的,而且也很实用,应为Oracle虽然有SQL*Loader可以将文本的内容读到数据库里, 但是不能将数据库内容输出到文本。所以基本上是要用到utl_file包来操作。先看了一下Oracle官方文档中的介绍, utl_file推荐直接使用自己创建的DIRECTORY来操作文件,而不要继续使用UTL_FILE_DIR包来指定。utl_file包的 工作机制是这样的:首先要使用FOPEN函数,将文件的路径、文件名、以及打开模式的参数传入,然后Oracle会到 ALL_DIRECTORIES视图中查看路径是否已经创建。如果路径和文件名均合法,则该文件被打开到一个file_type中, 然后可以进行各种操作,最后使用FCLOSE函数将其关闭。具体了解包可以查看utlfile.sql里面的内容,这里仅列举 一下常用过程和函数。
FOPEN
, IS_OPEN , GET_LINE , PUT , NEW_LINE ,
PUT_LINE , PUTF , FFLUSH , FCLOSE , FCLOSE_ALL 。
---------------------------------------------------------------
1.UTL_FILE.FOPEN
--FOPEN会打开指定文件并返回一个文件句柄用于操作文件。
FUNCTION UTL_FILE.FOPEN
( location IN VARCHAR2, --输出文件地址 filename IN VARCHAR2, --输出文件名 open_mode IN
VARCHAR2, --打开文件的模式 max_linesize IN BINARY_INTEGER DEFAULT NULL
--文件每行最大的字符数,包括换行符。最小为1,最大为32767
) RETURN
file_type; 3种文件打开模式:
R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。
W 写(替换)模式。文件的所有行会被删除。PUT, PUT_LINE, NEW_LINE,
PUTF和FFLUSH都可使用。
A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE,
PUTF和FFLUSH都可使用。
2.UTL_FILE.IS_OPEN
--如果文件句柄指定的文件已打开,返回TRUE,否则FALSE
FUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE--文件句柄
)
RETURN BOOLEAN;
3.UTL_FILE.GET_LINE
--UTL_FILE只提供一个方法去读取数据:GET_LINE
读取指定文件的一行到提供的缓存。
PROCEDURE
UTL_FILE.GET_LINE(file IN UTL_FILE.FILE_TYPE, --文件句柄
buffer OUT VARCHAR2,--存放缓存,行终止符不会被传进buffer
len IN BINARY_INTEGER DEFAULT NULL);
4.UTL_FILE.PUT
--在当前行输出数据
--UTL_FILE.PUT输出数据时不会附加行终止符。
PROCEDURE UTL_FILE.PUT(file IN
UTL_FILE.FILE_TYPE, --文件句柄
buffer OUT VARCHAR2);--要写入的数据缓存
5.UTL_FILE.NEW_LINE
--在当前位置输出新行或行终止符,使用UTL_FILE.PUT必须使用NEW_LINE来结束当前行。
--但可以使用PUT_LINE输出带有行终止符的完整行数据。
PROCEDURE UTL_FILE.NEW_LINE(file IN UTL_FILE.FILE_TYPE,
--文件句柄
lines IN NATURAL := 1); --要插入的行数,默认为1行
6.UTL_FILE.PUT_LINE
--输出一个字符串以及一个与系统有关的行终止符。
--PUT_LINE相当于PUT后加上NEW_LINE;也相当于PUTF的格式串"%s/n"。
PROCEDURE UTL_FILE.PUT_LINE
(file IN UTL_FILE.FILE_TYPE,
--文件句柄
buffer IN VARCHAR2);--写入文件的数据缓存
7.UTL_FILE.PUTF
以一个模版样式输出至多5个字符串,类似C中的printf
PROCEDURE UTL_FILE.PUTF(file IN
FILE_TYPE,--文件句柄
format IN VARCHAR2,--格式串
arg1 IN VARCHAR2 DEFAULT
NULL,--可选参数,一共5个
arg2 IN VARCHAR2 DEFAULT NULL,
arg3 IN VARCHAR2 DEFAULT NULL,
arg4 IN
VARCHAR2 DEFAULT NULL,
arg5 IN
VARCHAR2 DEFAULT NULL);
格式串可使用以下样式
%s
在格式串中可以使用最多5个%s,与后面的5个参数一一对应
/n
换行符。在格式串中没有个数限制
%s会被后面的参数依次填充,如果没有足够的参数,%s会被忽视,不被写入文件
8.UTL_FILE.FFLUSH
--确保所有数据写入文件。
--操作系统可能会缓存数据来提高性能。因此可能调用put后,打开文件却看不到写入的数据。
--在关闭文件前要读取数据的话可以使用UTL_FILE.FFLUSH。
PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);
9.UTL_FILE.FCLOSE
--关闭文件
PROCEDURE UTL_FILE.FCLOSE (file IN OUT FILE_TYPE);
10.UTL_FILE.FCLOSE_ALL
--关闭所有已打开的文件
PROCEDURE UTL_FILE.FCLOSE_ALL;
在结束程序时要确保所有打开的文件已关闭,可使用FCLOSE_ALL。
oracle 导出数据 utl,【原创】利用utl_file包进行表数据导出相关推荐
- oracle读写文件--利用utl_file包对磁盘文件的读写操作
oracle读写文件--利用utl_file包对磁盘文件的读写操作 摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做, ...
- 利用Flume将MySQL表数据准实时抽取到HDFS
转自:http://blog.csdn.net/wzy0623/article/details/73650053 一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取 ...
- flume mysql hdfs_利用Flume将MySQL表数据准实时抽取到HDFS
一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取从MySQL数据库增量抽取数据到HDFS,然后用HAWQ的外部表进行访问.这种方式只需要很少量的配置即可完成数据抽 ...
- 基于BC95的数据转发,利用Python实现UDP接收数据,TCP转发数据
基于BC95的数据转发,利用Python实现UDP接收数据,TCP转发数据 文章信息 环境信息 系统概览 基于Python的UDP(服务端)数据接收 1. UDP接受的数据如何读取 文章信息 撰写日期 ...
- SQL Server 常用更新语句,用B表数据作为条件或数据源更新A表数据
SQL Server 常用更新语句,用B表数据作为条件或数据源更新A表数据 示例:用B表姓名覆盖A表姓名 假设: A表数据 Id,Name 1,张三 B表数据 Id,Name 1,李四 用下面这个语句 ...
- oracle utl file putf,UTL_FILE包详解(第二篇)
3.4 PUT() 英文解释:Writes astringtoafile 用法: utl_file.put(file IN FILE_TYPE, buffer IN); 函数原型: PROCEDURE ...
- Python利用pandas包快速导入和导出csv、excel文件数据
导入excel数据: import pandas as pd # 导入数据 data = pd.read_excel(r"C:\Users\xw\Desktop\data4.xlsx&quo ...
- 利用UTL_FILE包实现文件I/O操作
摘要:本文主要讨论如何利用Oracle的UTL_FILE包来实现对磁盘文件的I/O操作. 文件I/O对于数据库的开发来说显得很重要,比如如果数据库中的一部分数据来自于磁盘文件,那么就需要使用I/O接口 ...
- mysql utl_file_利用UTL_FILE包实现文件I/O操作
摘要:本文主要讨论如何利用Oracle的UTL_FILE包来实现对磁盘文件的I/O操作. 文件I/O对于数据库的开发来说显得很重要,比如如果数据库中的一部分数据来自于磁盘文件,那么就需要使用I/O接口 ...
最新文章
- QEMU使用手册 - 1概述
- 已解决:虚拟机无法获取所有权
- 3ds max 渲染清晰面片的边缘
- SAP Spartacus 里的 cxOutletRef 指令执行过程分析
- 自定义控件的构建(12)
- Spring Setter依赖注入示例
- 多线程多进程解析:Python、os、sys、Queue、multiprocessing、threading
- iOS项目开发优秀文章汇总
- Tips--Docker常用命令
- Django REST framework 的快速入门教程
- ken沈oracle,甲骨文宣布推出Oracle商务软件
- android通用对话框,android-所有活动中的“通用”对话框
- Unity3D(四)Camera和SkyBox
- 协作中继认知无线电功率分配
- Java:Eclipse下载安装教程,以及Eclipse 安装汉化包的方法
- 余额宝不是吸血鬼,银行才是
- Grafana——》重置默认的登录密码
- 批量/去掉office 2010 Word中标题前的黑点
- 网络公益信息特征和用户行为规律研究以微博为例
- 新浪微博PC客户端(DotNet WinForm版)—— 初探
热门文章
- JVM方法区内存分配
- python分类算法报告_Python机器学习(1)——决策树分类算法
- 高并发之并发容器详解(从入门到超神)
- Jsoup抓取网页数据完成一个简易的Android新闻APP
- 数据结构-二叉树和二叉查找树
- (仿头条APP项目)5.列表页面设计实现
- 取代C语言标准输入输出:cin 和 cout【C++标准输入输出】
- Oracle Dababase_buffer_cache数据库高速缓存组织结构剖析
- Java消息中间件(activeMQ)
- css怎样通过超链接更改背景,css超链接的底色如何设置