导航
统计
- 随笔 - 9
- 文章 - 0
- 评论 - 0
- 引用 - 0
公告
搜索
常用链接
随笔档案
最新评论
阅读排行榜
- 1. Linux(以centos7为例)下自动挂载NTFS硬盘(6702)
- 2. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台(402)
- 3. 如何安装win10+Red Hat Enterprise Linux双系统?(338)
- 4. Linux(以RHEL7为例)下添加工作区的方法|| The Way To Add Workspace On Linux(91)
- 5. tar打包如何不打包某一个文件夹(排除某些文件夹)(78)
评论排行榜
推荐排行榜
Crontab定时执行Oracle存储过程
Crontab定时执行Oracle存储过程
需求描述
我们有一个Oracle的存储过程,里面是每个月需要执行一下,生成报表,然后发送给业务部门,这一个功能我们有实现在系统的前台界面(如图1-1),但是客户每次都不点重新生成,导致导出报表时报出异常(如图1-2)。
图1-1
图1-2
问题分析
既然它是一个存储过程,我们定位到了该请求相对应的存储过程,如下图所示
图1-3
我们看它的参数,只有两个,一个是开始时间,表示当月的开始时间,一个时结束时间,表示当月结束时间,我们只要在脚本执行它的时候传一个参数给它就可以。
问题解决
想要解决这个问题,我的想法是这样,把需要处理的所有逻辑写在脚本里,然后设定一个Crontab,通过定时任务去执行。
一,首先看单纯在plsql是如何调用这个存储过程的,我通过定义一个startdate和enddate,然后通过Oracle的时间函数last_day计算出每月的最后一天,开始的第一天我是直接在月份拼接了'01',至于为什么add_months(sysdate,-1)要-1,是因为当月的一般执行上个月的。
declare
startdate varchar2(8);
enddate varchar2(8);
begin
select to_char(add_months(sysdate,-1),'YYYYMM')||'01'
into startdate from dual;
select to_char(last_day(add_months(sysdate,-1)),'YYYYMMDD')
into enddate from dual;
proc_high_settle_rep_month(startdate,enddate);
end;
/
二,把上述的逻辑写入到sh脚本中,我们在相关的路径新建一个文件call_proc_high_settle_rep_month.sh,通过执行sqlplus,然后去执行上述的内容
脚本内容如下:
其中sqlplus中的zh表示数据库账户名,*表示密码,zh10g表示数据库实例名,是你配置在tnsnames.ora的连接名。
. /issdata/application/appiss/.profile
echo "get begging"
date
sqlplus zh/*****@zh10g <<!
declare
startdate varchar2(20);
enddate varchar2(20);
begin
select to_char(add_months(sysdate,-1),'YYYYMM')||'01'
into
startdate from dual;
select to_char(last_day(add_months(sysdate,-1)),'YYYYMMDD')
into enddate from dual;
proc_high_settle_rep_month(startdate,enddate);
end;
/
!
echo "get Finished"
三、手工执行了这个脚本,发现没错误,可以执行。
sh call_proc_high_settle_rep_month.sh
我们添加到crontab中,crontab -e进入crontab编辑,注意脚本要写绝对路径
08 23 5 * * sh /tmp/call_proc_high_settle_rep_month.sh
上述的crontab就代表每月的5号的23:08分就会执行这个命令。
上面的08 23 5 * * 依次代表分、时、日、月、周。
至此,整个程序已经实现好所有的逻辑,以后就算以后业务部分不点,也可以导出生成基础数据,报出报表了。
posted on 2018-07-23 21:00 钟子敬07 阅读(2) 评论(0) 编辑 收藏 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录 或 注册, 访问网站首页。 【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!【前端】SpreadJS表格控件,可嵌入应用开发的在线Excel
【推荐】如何快速搭建人工智能应用?
【活动】AI技术全面场景化落地实践
【大赛】2018首届“顶天立地”AI开发者大赛

· 快删!“山寨微信”可转发语音 听到这四个字很危险
· 二手交易平台调查:恶意砍价、以次充好、吞吃押金
· 又一P2P平台爆雷?广州礼德财富称其实际控制人失联
· 用户起诉拼多多 称购买后发现与商品描述存巨大差距
· Chrome OS启用全新Shelf桌面布局:应用图标挪到底部中间
» 更多新闻...

· 那些让人睡不着觉的bug,你有没有遭遇过?
· 观察之道:带你走进可观察性
· 危害程序员职业生涯的三大观念
· 断点单步跟踪是一种低效的调试方法
· 测试 | 让每一粒尘埃有的放矢
» 更多知识库文章... Powered by:
博客园
Copyright © 钟子敬07