oracle utl_file 游标,[转贴] UTL_FILE用法笔记
最近做的一个项目,其中有一块的功能是将数据导出为excel文件。我使用了oracle的utl_file程序包。主要实现思路:
1、声明一个纪录,用来存储导出的数据;
2、使用游标取数据到纪录中;
3、使用utl_file将纪录中的数据写入excel文件;
4、循环执行步骤2和3,完成数据的导出。
做的过程中主要遇到的问题:
1、excle文件中写数据如何写入下一列; 使用TAB字符完成excel中横向跳格,excel中TAB字符表示单元格的结尾,其中使用了chr()函数,应用举例如下: select U.USER_NAME||chr(9),U.ACCOUNT||chr(9) from USER U
例句1 例句1作为游标的主体,取出的数据每项都包含一个TAB字符,使用utl_file.put()往excel文件中写数据时会自动跳格
2、声明的纪录中各项的类型问题
这个问题的产生主要是在类型的强转化时产生。如例句1种的U.ACCOUNT为number型时,
添加||chr(9)时oracle会对进行强转化;当然这里的转化不会有问题(number转化为varchar2),
但是当这种强转换还是会出现问题的,如声明的纪录里某个属性声明为用户自己定义的一种类型,
oracle无法进行转换,则会报错。解决的办法很简单,可以将纪录的属性都声明为varchar类型,但是要注意长度。
3、导出文件存储路径问题
utl_file在写文件时,文件的存储路径必须在oracle初始化参数utl_file_dir中设置,
需重起服务才能生效。后来经过查资料发现可以先建立一个directory,在存储过程中使用它。
建立directory的语句:
create or replace directory FILEPATH as 'path' ";
例句2(注:path为存储文件的路径,如c:\Temp)
以下是我简单做的处理hr.jobs表数据的存储过程:
CREATE OR REPLACE PROCEDURE SP_JOBS_DATA_OUT(
p_file_name IN VARCHAR2 --***处理文件名称,需包含扩展名(xls用于写excel文件)***--
) as
--***定义并声明存储交通资产信息的纪录***--
--***record_define start***--
TYPE job_record_type is RECORD(
job_id hr.jobs.job_id%TYPE,
job_title hr.jobs.job_title%TYPE,
min_salary varchar2(30)
);
job_rec job_record_type;
--***record_define end***--
--***定义获取job信息的游标***--
--***cursor_define start***--
CURSOR c_jobs IS
select
job_id||chr(9), --***chr(9)是TAB字符,保证数据输出到EXCEL时能自动换到下一列***--
job_title||chr(9),
min_salary||chr(9)
FROM
hr.jobs;
--***cursor_define end***--
l_file utl_file.file_type; --***处理文件操作的句柄***--
BEGIN
l_file :=utl_file.fopen('FILEPATH',p_file_name,'w'); --FILEPATH是先于导出前用户建立的存储导出文件的路径
utl_file.put_line(l_file,'jobs表导出数据');
OPEN c_jobs;
LOOP
FETCH c_jobs INTO
job_rec.job_id ,
job_rec.job_title ,
job_rec.min_salary ;
EXIT WHEN c_jobs%NOTFOUND;
utl_file.put(l_file,job_rec.job_id ); --***数据写入excle文件中***--
utl_file.put(l_file,job_rec.job_title);
utl_file.put_line(l_file,job_rec.min_salary);
END LOOP;
CLOSE c_jobs;
utl_file.fflush(l_file);
utl_file.fclose(l_file);
EXCEPTION
WHEN others THEN
IF utl_file.is_open(l_file) THEN
utl_file.fclose(l_file);
END IF;
END;
本文来自: 站长() 详细出处参考:
oracle utl_file 游标,[转贴] UTL_FILE用法笔记相关推荐
- Oracle中游标Cursor基本用法详解
这篇文章主要介绍了Oracle中游标Cursor基本用法详解,还是比较全面的,具有一定参考价值,需要的朋友可以了解下. 查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT ...
- oracle 导出数据 utl,使用utl_file做选择性数据导出
在平时的数据导出中使用exp/expdp能够满足绝大部分的数据导出任务.如果有一些表的数据不多,但是查询条件要复杂一些,使用exp/expdp就很吃力了. 或者在和外部系统的交互中,使用xml或者文本 ...
- day12_oracle hint——SQL优化过程中常见Oracle中HINT的30个用法
在SQL语句优化过程中,经常会用到hint, 以下是在SQL优化过程中常见Oracle中"HINT"的30个用法 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方 ...
- Oracle基础 游标
原文:Oracle基础 游标 一.游标 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在 ...
- oracle利用游标添加数据库,Oracle数据库游标的类型及使用实例全解
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.Oracle数据库的Cursor类型包含三种: 静态游标:分为显式(explicit)游标 ...
- Oracle 动态游标 PL/SQL 动态SQL语句 open for [using] 语句
PL/SQL:open for [using] 语句 2017年07月19日 09:52:55 学孩儿无牙哭做粥 阅读数:681 标签: oracleSQLPLSQL 更多 个人分类: ORACLES ...
- oracle触发器函数,oracle 存储过程、函数和触发器用法实例详解
本文实例讲述了oracle 存储过程.函数和触发器用法.分享给大家供大家参考,具体如下: 一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 创建存储过程 用CR ...
- Oracle中游标Cursor介绍
转自:http://zohan.group.iteye.com/group/wiki/2278-cursor Oracle中游标Cursor介绍 一 概念 游标是SQL的一个内存工作区,由系统或用户 ...
- 使用oracle 游标修改数据,修改oracle数据库游标
SQL游标原理和使用方法 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/chinahuyong/article/details/3552248 SQL ...
最新文章
- jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
- 如何取消 登录_LSAT | 退考、缺考、取消成绩,各自的区别和流程是怎样的?
- 从0到1构建美团压测工具
- 作者:刘强(1990-),男,中国科学院自动化研究所博士生
- 机器学习分支:active learning、incremental learning、online machine learning
- python编程成果_20192217 2019-2020-2 《Python程序设计》实验四报告
- 做了这么久的程序员,你知道为什么会有Lambda表达式吗?
- OpenGL ES glew 下载和使用
- 从认知负荷理论看语音交互设计
- 网易云课堂资源合集百度云分享 下载
- window7安装jdk报错this version of the jdk is already installed
- laravel-集合对象的销毁forget,重组values(),pluck ()方法
- cpuz测试分数天梯图_PC电脑桌面CPU天梯图2020 单路CPU性能排名
- binlog回滚mysql误操作数据
- 如何升级npm的版本
- USB Network Gate SDK Crack,构建USB Network Gate的技术
- aria2c 的基本配置,附带傻瓜式源码
- android弹幕功能,很棒的Android弹幕效果实例
- 有以下三张表,学生表 student 课程表 course 成绩表 result
- prometheus搭建