千家信息网

Oracle通过Sqlplus结合Shell脚本方式生成Excel文件

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,一、问题描述 今天接到一个任务,是要求每天通过SQL脚本生成excel文件,并且自动发送到相关人员邮箱。这个需求我还真是没有做过,之前只做过通过SQL脚本生成为HTML网页文件。于是乎,我又开始的学习
千家信息网最后更新 2026年10月31日Oracle通过Sqlplus结合Shell脚本方式生成Excel文件一、问题描述 今天接到一个任务,是要求每天通过SQL脚本生成excel文件,并且自动发送到相关人员邮箱。这个需求我还真是没有做过,之前只做过通过SQL脚本生成为HTML网页文件。于是乎,我又开始的学习过程,如今的Internet时代,解决问题就是easy,很快就找到了eygle的博客(使用SQL*PLUS,构建完美excel或html输出http://www.eygle.com/archives/2005/04/eoasqlplusieaae.html)。下面是学习过程中的实验部分。
二、实验 1.建立测试表

  1. SAM@dzwj > create table test1(id int,name varchar2(10),loc varchar2(30),hire_date date,email varchar2(20),department varchar2(20));
  2. Table created.

  3. SAM@dzwj > insert into test1 values (1,'sam1','beijing',sysdate,'sam1@oracle.com','it');
  4. 1 row created.
  5. SAM@dzwj > insert into test1 values (2,'sam2','beijing',sysdate,'sam2@oracle.com','it');
  6. 1 row created.
  7. SAM@dzwj > insert into test1 values (3,'sam3','beijing',sysdate,'sam3@oracle.com','it');
  8. 1 row created.
  9. SAM@dzwj > insert into test1 values (4,'sam4','beijing',sysdate,'sam4@oracle.com','it');
  10. 1 row created.
  11. SAM@dzwj > insert into test1 values (5,'sam5','beijing',sysdate,'sam5@oracle.com','it');
  12. 1 row created.

  13. SAM@dzwj > SAM@dzwj > commit;
  14. Commit complete.

  15. SAM@dzwj > select * from test1;

  16. ID NAME LOC HIRE_DATE EMAIL DEPARTMENT
  17. ---------- ---------- ------------------------------ ------------------ -------------------- --------------------
  18. 1 sam1 beijing 28-NOV-17 sam1@oracle.com it
  19. 2 sam2 beijing 28-NOV-17 sam2@oracle.com it
  20. 3 sam3 beijing 28-NOV-17 sam3@oracle.com it
  21. 4 sam4 beijing 28-NOV-17 sam4@oracle.com it
  22. 5 sam5 beijing 28-NOV-17 sam5@oracle.com it


2.编辑 main.sql

  1. [oracle@testdb ~]$ cat main.sql
  2. set linesize 200 pagesize 10000
  3. set term off verify off feedback off
  4. set markup html on entmap on spool on preformat off
  5. alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
  6. spool /home/oracle/test1.xls
  7. @/home/oracle/get_tables.sql
  8. spool off
  9. exit

3.编辑 get_tables.sql

  1. [oracle@testdb ~]$ cat get_tables.sql
  2. select * from test1;

4.编辑执行文件 collect.sh

  1. [oracle@testdb ~]$ cat collect.sh
  2. #!/bin/bash
  3. . /home/oracle/.bash_profile
  4. DATE=`date +%Y%m%d`
  5. sqlplus sam/oracle@dzwj @/home/oracle/main
  6. mv /home/oracle/test1.xls /home/oracle/test1_${DATE}.xls

5.给collect.sh 执行权限

  1. [oracle@testdb ~]$ chmod u+x collect.sh

6.执行

  1. [oracle@testdb ~]$ ./collect.sh

  2. SQL*Plus: Release 11.2.0.4.0 Production on Wed Nov 29 11:00:19 2017

  3. Copyright (c) 1982, 2013, Oracle. All rights reserved.


  4. Connected to:
  5. Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
  6. With the Partitioning, OLAP, Data Mining and Real Application Testing options

  7. Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
  8. With the Partitioning, OLAP, Data Mining and Real Application Testing options

7.验证 将文件传回到本地机器打开,得到想要的excel文件

三、总结 生活在Internet时代真是件幸福的事,此次任务算是告一段落,但是当中还是碰到一些小problems,比如一开始没有加时间NLS_DATE_FORMAT变量的修改,导出的时间类型数据时没有时间,只有年月日。总而言之,多学习,多实践,没错的。向eygle大神致谢。 Where there is a will, there is a way.



文件 学习 脚本 任务 时代 时间 过程 问题 实验 生成 幸福 人员 博客 变量 只有 告一段落 大神 就是 年月 年月日 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技和互联网公司 今日互联网科技 疫情对互联网科技公司影响 工业互联网科技新基建 互联网金融 科技金融 善班互联网科技 四川狮子座互联网科技 互联网 科技服务平台 北京华百购互联网科技有限公司 中化能源互联网科技招聘 晓花互联网科技有限公司网址 互联网5g黑科技有哪些 深圳市罗太互联网科技有限公司 互联网金融科技名词解释 群盈汇互联网科技有限公司 伊宁互联网科技做什么的 上海乐五互联网科技有限公司 恒生科技指数 中概互联网 承德科技产业互联网平台 利用互联网等科技手段 上海喔噻互联网科技有限公司 山东特亿宝互联网科技有限公司 互联网科技公司华为 与互联网科技公司 互联网科技金融 极限挑战互联网科技 赫美联合互联网科技 西藏七维空间互联网科技有限公司 昭通互联网科技选哪家 无锡工业互联网科技有限公司
0