为了账号安全,请及时绑定邮箱和手机立即绑定

数据导出到excle脚本语句

请问oracle导出表数据到excle中的脚本语句咋写的?

正在回答

1 回答

无法直接保存到excel中,但是可以保存到csv文件,同样是excel的格式,方法如下:
譬如要把文件生成在d盘下的test目录下:
1,在d盘根目录下新建test目录
2,sqlplus以system用sysdba登录
3,create or replace directory TMP as ’d:\test’;
4,grant read on directory TMP to user;
5,alter system set utl_file_dir='d:\test' scope=spfile;
然后建立存储过程,表是随便建了一个,最后的文件名按要求需要按照当前日期的前一天生成,所以后边文件名的地方write_file_name处就按照要求来了
create or replace PROCEDURE SP_OUTPUT
(
on_flag      OUT      NUMBER,
out_reason   OUT      VARCHAR2)
is
v_code          number;
v_text          varchar2(255);

file_handle utl_file.file_type;
Write_content VARCHAR2(1024);
Write_file_name VARCHAR2(50);
v_aaa varchar2(5);
v_bbb varchar2(5);

cursor cur_sp_out
is
select aaa,bbb
from aaa;
begin
open cur_sp_out;
loop
   fetch cur_sp_out into   v_aaa,v_bbb;
   exit when cur_sp_out%notfound;
   write_file_name := to_char(SYSDATE,'YYYYMMDD')||'.xls';
                            file_handle := utl_file.fopen('TMP',write_file_name,'a');
                            write_content := v_aaa||' '||v_bbb;
                           --write file
                            IF utl_file.is_open(file_handle) THEN
                               utl_file.put_line(file_handle,write_content);
                           END IF;
                           --close file
                           utl_file.fclose(file_handle);
   end loop;
   close cur_sp_out;

  v_code := 0;
v_text := '完成';
exception
when others then
on_flag := SQLCODE;
   out_reason := SQLERRM;
   begin
   IF utl_file.is_open(file_handle) THEN
   utl_file.fclose(file_handle);
   end IF;
   end;
   rollback;
end;

这样基本就完成了,但是建立完毕后需要重启数据库,否则文件写不进指定的目录下

需要注意的是: write_content := v_aaa||' '||v_bbb;   这个位置

v_aaa|| 和v_bbb中间引号的地方是TAB符,否则输出来的XLS文件中,会把这些字符串合在一个单元格中。

3 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

数据导出到excle脚本语句

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信