使用utl

excel|oracle|数据|数据库

    最近做的一个项目,其中有一块的功能是将数据导出为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;
例句3(注:我的oracle版本为9.2)

这是我第一个blog,可能内容不是很有技术含量的说,但总希望记录一下自己的历程,分享大家的经验。
msn:lintaowen@hotmail.com

 

时间: 2024-10-29 06:40:55

使用utl的相关文章

utl

第一步:以管理员用户登陆如:conn sys/password@sid as sysdba第二步:设置可操作目录需要指定utl_file包可以操作的目录.在oracle 10g以前,可以用以下方法:1.alter system set utl_file_dir='e:\utl' scope=spfile;2.在init.ora文件中,配置如下:      UTL_FILE=E:\utl或者UTL_FILE_DIR=E:\utl在oracle 10g中建议用以下方法配置:CREATE DIRECT

利用UTL

本文主要讨论如何利用Oracle的UTL_FILE包来实现对磁盘文件的I/O操作. 文件I/O对于数据库的开发来说显得很重要,比如如果数据库中的一部分数据来自于磁盘文件,那么就需要使用I/O接口把数据导入到数据库中来.在PL /SQL中没有直接的I/O接口,一般在调试程序时可以使用Oracle自带的DBMS_OUTPUT包的put_line函数(即向屏幕进行I/O操作)即可,但是对于磁盘文件的I/O操作它就无能为力了.其实Oracle同样也提供了可以进行文件I/O的实用包-----UTL_FIL

UNIX oracle 10g能用utl

oracle|unix|数据 UNIX oracle 10g能用utl_file包读取文件数据吗? 我在WINDOW 下ORACLE 8i利用utl_file可以读取文本文件的数据,我本人测试通过,但是在UNIX oracle 10g不行呀!出错!begin loadfiledata('d:\ora','1.txt'); end; ORA-29280: 目录路径无效ORA-06512: 在 "SYS.UTL_FILE", line 33ORA-06512: 在 "SYS.UT

Oracle的安全性简介

数据库安全和最小权限原则 一.PUBLIC权限 PUBLIC角色隐式授予每位用户.只要为PUBLIC授予任何权限,相应的权限实际上就会授予可以连接到数据库的每个人,创建的每个账户都有权访问这些权限.默认方式下,PUBLIC用户拥有大量权限. gyj@OCM> select count(*) from dba_tab_privs where grantee='PUBLIC'; COUNT(*) ---------- 28164 gyj@OCM> select table_name from db

find 按文件修改时间查找文件及find空文件夹

  查找两天前修改过的文件: find . -type f -mtime -2 查找3天内修改过的文件: find -ctime -3 find命令使用超过6天,空文件独立查询命令: find /data/backup -ctime +6 -exec rm -f {} ; 删除/data/backup目录下修改时间超过6天的文件. find /data/backup -type d -empty -exec rmdir {} ; >/dev/null 2>&1 删除/data/back

WAP(wml)开发问答

    1. 开发WAP软件需要哪些工具?     为了开发WAP应用程序,需要一个WAP网关(注意:这里的网关可能是指支持WML的服务器.可以通过配置WWW服务器达到这个目的)和WAP工具包.工具包应当包括模拟器和能让开发者浏览WML网页.WML页面的开发和HTML页面的开发一样,可以使用Notepad或者其他文本编辑器来进行编辑. 2. 有哪些公司现在提供这样的开发环境? Nokia.Ericsson.UpPhone和Motorola都提供免费的WAP网关和工具包.Nokia:Nokia T

oracle数据库开发的一些经验积累(一)

oracle|数据|数据库 1.不安装Oracle客户连接Oracle 8的方法请将以下文件拷贝到运行文件所在目录 一.ODBC动态库 : ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc32.dll odbc32gt.dll odbccp32.dll odbccr32.dll odbcint.dll 二.建立EXTRA子目录,将MSVCRT.DLL文件拷贝到该子目录下 EXTRA\MSVCRT.DLL 三.ORACLE动态库及配置文件 Tnsnames.or

关于百度搜索结果跳转URL代码规律研究

百度和360之间的搜索大战可为是神秘而又精彩,今天SEO博客又发现了百度的一个新动作:百度对于搜索结果是一个跳转的URL,原本链接到网站的真实地址被设置成了跳转地址.闲逛到BSG论坛看到Robin也提问,真巧! 那么这里SEO博客也引用两个提问: 1.每个网页的跳转地址是唯一的么?会不会因为搜索场景的变化而变化? 2.百度这样做的目的是什么?SEO们需要做怎样的调整应对? 测试环境准备:1.本机;2.局域网其他电脑;3.外网同一DNS;4.外网不同DNS 测试实验开始: 1.在自己的电脑上进行任

谈谈关于网站优化的七大黑帽手段

黑帽的优化手段是很吸引人的,关键词排名有可能会迅速提升,而不像正规的白帽做站方法,优化时间长,见效很慢,当然,如果排名做上去了的话,排名也是很稳定的,而黑帽虽然说优化上去了,但一旦被搜索引擎发现了,后果是不堪设想的,网站直接被拔毛,被K,这个时候你有可能不得不换域名了.因为有时候恢复都要好几个月的时间,所以说一旦被拔毛了,在精力上和金钱上都是一个比较大的损失.当然,如果网站用黑帽手段做上去了的话,短时间内百度没K站的话,也许在这个时间空隙你就能把钱赚回来,而且有可能是成倍的利润吧.当然也有很多人