最近做的一个项目,其中有一块的功能是将数据导出为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用法笔记相关推荐

  1. Oracle中游标Cursor基本用法详解

    这篇文章主要介绍了Oracle中游标Cursor基本用法详解,还是比较全面的,具有一定参考价值,需要的朋友可以了解下. 查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT ...

  2. oracle 导出数据 utl,使用utl_file做选择性数据导出

    在平时的数据导出中使用exp/expdp能够满足绝大部分的数据导出任务.如果有一些表的数据不多,但是查询条件要复杂一些,使用exp/expdp就很吃力了. 或者在和外部系统的交互中,使用xml或者文本 ...

  3. day12_oracle hint——SQL优化过程中常见Oracle中HINT的30个用法

    在SQL语句优化过程中,经常会用到hint, 以下是在SQL优化过程中常见Oracle中"HINT"的30个用法 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方 ...

  4. Oracle基础 游标

    原文:Oracle基础 游标 一.游标 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在 ...

  5. oracle利用游标添加数据库,Oracle数据库游标的类型及使用实例全解

    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.Oracle数据库的Cursor类型包含三种: 静态游标:分为显式(explicit)游标 ...

  6. Oracle 动态游标 PL/SQL 动态SQL语句 open for [using] 语句

    PL/SQL:open for [using] 语句 2017年07月19日 09:52:55 学孩儿无牙哭做粥 阅读数:681 标签: oracleSQLPLSQL 更多 个人分类: ORACLES ...

  7. oracle触发器函数,oracle 存储过程、函数和触发器用法实例详解

    本文实例讲述了oracle 存储过程.函数和触发器用法.分享给大家供大家参考,具体如下: 一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 创建存储过程 用CR ...

  8. Oracle中游标Cursor介绍

    转自:http://zohan.group.iteye.com/group/wiki/2278-cursor Oracle中游标Cursor介绍 一  概念 游标是SQL的一个内存工作区,由系统或用户 ...

  9. 使用oracle 游标修改数据,修改oracle数据库游标

    SQL游标原理和使用方法 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/chinahuyong/article/details/3552248 SQL ...

最新文章

  1. jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
  2. 如何取消 登录_LSAT | 退考、缺考、取消成绩,各自的区别和流程是怎样的?
  3. 从0到1构建美团压测工具
  4. 作者:刘强(1990-),男,中国科学院自动化研究所博士生
  5. 机器学习分支:active learning、incremental learning、online machine learning
  6. python编程成果_20192217 2019-2020-2 《Python程序设计》实验四报告
  7. 做了这么久的程序员,你知道为什么会有Lambda表达式吗?
  8. OpenGL ES glew 下载和使用
  9. 从认知负荷理论看语音交互设计
  10. 网易云课堂资源合集百度云分享 下载
  11. window7安装jdk报错this version of the jdk is already installed
  12. laravel-集合对象的销毁forget,重组values(),pluck ()方法
  13. cpuz测试分数天梯图_PC电脑桌面CPU天梯图2020 单路CPU性能排名
  14. binlog回滚mysql误操作数据
  15. 如何升级npm的版本
  16. USB Network Gate SDK Crack,构建USB Network Gate的技术
  17. aria2c 的基本配置,附带傻瓜式源码
  18. android弹幕功能,很棒的Android弹幕效果实例
  19. 有以下三张表,学生表 student 课程表 course 成绩表 result
  20. prometheus搭建

热门文章

  1. 黑苹果社区近期打不开做出回应
  2. 二氧化碳传感器CCS811简单的测试驱动_基于Arduino
  3. JAVA选择合适的垃圾收集器+内存分配实战
  4. 二维分岔混沌matlab,一类三维动力系统的分岔及混沌分析
  5. 光速: 时间膨胀:太空旅客;双生子杨缪  协变性,光速不变:
  6. Idea 设置快捷键Ctrl + W关闭当前界面
  7. thinkphp5 url重写后,如何引用静态资源文件?
  8. 高可靠性软件测试方案探讨
  9. 异质信息网络分析与应用综述
  10. 重磅!阿里云网盘,内测资格,开放申请了!非会员下载 10MB/s!