首先,在服务器上创建一个导出文件的存储路径:
create or replace directory DIR_EXCEL as '/app/oracle';--注意:此处的DIR_EXCEL代表存储路径'/app/oracle';
然后,创建存储过程如下:create or replace procedure PRC_TASK_EXCEL is
out_file utl_file.file_type; --定义一个文件类型
v_begindate varchar2(23);
v_enddate varchar2(23);
begin
v_begindate := '2017-05-23 00:00:00';
v_enddate := '2017-05-24 00:00:00';
out_file := utl_file.fopen('DIR_EXCEL', 'aaa.xls', 'W');
--抬头
utl_file.put(out_file, '日期' || chr(9));
utl_file.put(out_file, '电话' || chr(9));
utl_file.put_line(out_file, '');
for o in (select c.send_date || chr(9) vin, c.mobile || chr(9) autoid
from sms_business_userinfos_crm c
where c.create_time between v_begindate and v_enddate) loop
utl_file.putf(out_file, o.vin);
utl_file.put(out_file, o.autoid);
utl_file.put(out_file, convert('中国人', 'ZHS16GBK'));--汉子时转化字符格式,解决汉子乱码
utl_file.put_line(out_file, '');
end loop;
utl_file.fflush(out_file);
utl_file.fclose(out_file); --关闭文件流
--处理异常
exception
when others then
rollback;
prc_log_new(SYSDATE, 'error');
utl_file.fclose(out_file); --关闭文件流,防止异常关闭
end PRC_TASK_EXCEL;
该存储过程只执行将一条sql语句查询到的数据导出到EXCEL中,如果想在一个过程中导出多个excel,可以复制该段代码粘贴到下方,改变sql和导出文件的名称即可。运行时,会一次执行导出操作!