前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Crontab定时执行Oracle存储过程

Crontab定时执行Oracle存储过程

作者头像
星哥玩云
发布2022-08-16 21:14:11
1.7K0
发布2022-08-16 21:14:11
举报
文章被收录于专栏:开源部署

需求描述

我们有一个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 * * 依次代表分、时、日、月、周。

至此,整个程序已经实现好所有的逻辑,以后就算以后业务部分不点,也可以导出生成基础数据,报出报表了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档