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 * * 依次代表分、时、日、月、周。
至此,整个程序已经实现好所有的逻辑,以后就算以后业务部分不点,也可以导出生成基础数据,报出报表了。
Crontab定时执行Oracle存储过程的更多相关文章
- 使用oracle 的 PL/Sql 定时执行一个存储过程
CSDN日报20170322--<关于软件研发的一些体会总结> 同步博客至 CSDN ,让更多开发者看到你的文章 看微博技术大咖解析互联网应用架构实战 使用oracle 的 PL/Sql ...
- linux crontab定时执行
#利用crontab定时执行url研究了两种简单方式#一利用lynx访问url yum install lynxservice crond startcrontab -einsert键* * * * ...
- crontab定时执行任务
第一部分 crontab介绍 每个操作系统都有它的自动定时启动程序的功能,Windows有它的任务计划,而Linux对应的功能是crontab. crontab简介 crontab命令常见于Unix和 ...
- linux下使用crontab定时执行脚本
使用crontab定时执行脚本 cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务: crontab –e : 修改 crontab 文件,如果文件不存在会自 ...
- crontab定时执行shell脚本失败的原因
有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...
- 小记---------手动执行脚本正常执行,使用crontab定时执行时 不执行
可能出现的原因就是因为crontab不会从用户的/etc/profile文件中读取环境变量,所以就出现 使用定时crontab执行时 无法执行 抛错 所以在使用crontab 定时执行脚本时 在脚本 ...
- Linux命令之Crontab定时任务,利用Crontab定时执行spark任务
Linux命令之Crontab定时任务,利用Crontab定时执行spark任务 一.Linux命令之Crontab定时任务 1.1 常见Crontab任务 1.1.1 安装crontab 1.1.2 ...
- linux下crontab定时执行shell脚本调用oracle 存储过程
问题:脚本内调用存储过程,脚本直接执行没问题,使用crontab 执行脚本存储过程未执行 原因:缺少oracle环境变量 解决:在shell脚本里添加oracle的环境变量 #!/bin/sh PAT ...
- 【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp
一.本人环境描述 1.oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0 2.Linux为centos6.5 32位,安装在Oracle VM Vir ...
随机推荐
- H5兼容ie做法
IE浏览器支持新的标签:可以在使用新标签之前用javascript创建一个虚假的标签,这样就可以识别了.如<article>标签,在使用前,创建一个虚假的<article>标签 ...
- js获取浏览器内核判断终端(是QQ打开还是QQ浏览器打开)
var browser ={ versions: function() { var u = navigator.userAgent, var ua = navigator.userAgent.toLo ...
- LeetCode contest-95[876,877,👁878]
876. Middle of the Linked List first submission # Definition for singly-linked list. # class ListNod ...
- junit 基础使用
junit百度百科: JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JU ...
- mac无密登陆到linux
最近弄了台linux云服务器,然而每次登陆linux都好麻烦,所以倒腾了下ssh无密登陆. linux:centos 6.5,自带ssh mac:yosemite,自带ssh 步骤: 1. 创建key ...
- dir函数
dir函数: dir() 是一个内置函数,用于列出对象的所有属性及方法 下面进行尝试: 用下面两个tests test2文件做实验 #创建一个类,两个常量,类中函数test1,类中属性, class ...
- 使用idea生成maven项目的jar包(转)
第一步 第二步 第三步 转自:https://blog.csdn.net/waterimelon/article/details/69243651
- mysql_day01
1.MySQL概述 1.什么是数据库 数据库是一个存储数据的仓库 2.都有哪些公司在用数据库 金融机构.游戏网站.购物网站.论坛网站 ... ... 3.提供数据库服务的软件 1.软件分类 MySQL ...
- as3中的embed
actionscript3允许把外部swf直接用Embed标记嵌入到主类中(当然用UrlLoader动态加载也行) 原 作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 关 ...
- rhce 第十一题 挂载NFS共享
挂载NFS共享 在system2上挂载一个来自 system1.group8.example.com 的NFS共享,并符合下列要求: /public 挂载在/mnt/nfsmount目录上 /prot ...