oracle用PLSQL把表数据写到excel的例子(UTL_FILE)

oraclePLSQL把表数据写到excel的例子(UTL_FILE

 

这里有个例子﹐不过不是结果﹐而是指定的table.你可以参考一下。

CREATE OR REPLACE PROCEDURE pro_Datatoexcel(

/*

 写出前需建立文件目录

CREATE OR REPLACE DIRECTORY

my_dir AS

'D:/aa'

赋权限给执行的用户

GRANT WRITE,READ ON DIRECTORY my_dir TO exam0701b

*/

   p_table IN VARCHAR2,

   p_path   IN VARCHAR2,

   p_file   IN VARCHAR2)

AS

   TYPE t_refcur   IS REF CURSOR ;       --定义游标变量

   v_fetchrow     t_refcur ;              --实例化

   v_cursor    INTEGER;

   v_sqlstatement VARCHAR2(100);

   v_colname    VARCHAR2(50);

   v_cols       VARCHAR2(500);

   v_data       VARCHAR2(500);

   v_describeinfo DBMS_SQL.DESC_TAB;

   v_drec       DBMS_SQL.DESC_REC;

   v_returncode INTEGER;

   v_numcolumns INTEGER;

   k              INTEGER:=0;

   v_filehandle UTL_FILE.FILE_TYPE;

BEGIN

   --写标宠则息

   v_cursor:=DBMS_SQL.OPEN_CURSOR;

   v_sqlstatement:='select * from ' || p_table;

   DBMS_SQL.PARSE(v_cursor, v_sqlstatement, dbms_sql.v7);

   DBMS_SQL.DESCRIBE_COLUMNS(v_cursor,   v_numcolumns, v_describeinfo);

   v_filehandle:=UTL_FILE.FOPEN(p_path,p_file,'w');

   FOR v_col IN 1..v_numcolumns LOOP

v_drec:=v_describeinfo(v_col);

v_cols:=v_cols||RPAD(v_drec.col_name, 16)||CHR(9);

   END LOOP;

   UTL_FILE.PUT(v_filehandle,v_cols) ;

 

   --获取总行数

   EXECUTE IMMEDIATE 'select count(*) from '|| p_table

   INTO k;

 

   --读取数据

   --先从行开始﹐再从列开始

   FOR i IN 1..k LOOP

   FOR v_col IN 1..v_numcolumns LOOP

      v_drec:=v_describeinfo(v_col);

   v_colname:=v_drec.col_name;

   OPEN v_fetchrow FOR 'select '||v_colname||' from (select '||p_table||'.*,rownum rk from '||p_table||' ) where rk ='||i;

   FETCH v_fetchrow INTO v_cols;

      v_data:=v_data||v_cols;

   v_data:=v_data||CHR(9);

   END LOOP;

 

   UTL_FILE.NEW_LINE(v_filehandle,1);

   UTL_FILE.PUT(v_filehandle,v_data) ;

   v_data :='';

   UTL_FILE.FFLUSH(v_filehandle) ;

   END LOOP;   

 

   UTL_FILE.FCLOSE(v_filehandle);   

   EXCEPTION

   WHEN UTL_FILE.INVALID_PATH THEN

RAISE_APPLICATION_ERROR(-20002,'ORA-错误﹐无效的文件路径!') ;

   WHEN UTL_FILE.INVALID_MODE THEN

RAISE_APPLICATION_ERROR(-20002,'ORA-错误﹐指定的文件模式无效!') ;

   WHEN UTL_FILE.WRITE_ERROR THEN

RAISE_APPLICATION_ERROR(-20002,'ORA-错误﹐在写操作时发生操作系统错误!') ;

   WHEN OTHERS THEN

IF UTL_FILE.IS_OPEN(v_filehandle) THEN      

   UTL_FILE.FCLOSE(v_filehandle);            

END IF;

RAISE_APPLICATION_ERROR(-20002,'产生转档文件失败﹐请联系程序开发人员!') ;

END;

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值