oracle通过job执行procedure
1. 先创建一个FUNCTION
CREATE OR REPLACE FUNCTION GET_TIMEOUT_PROGRAM(i_customerNo IN TK_CUST_PROG_D.CUSTOM_NO%TYPE,
i_programId IN TK_CUST_PROG_D.Prog_Id%TYPE,
i_timeout IN TK_CUST_PROG_D.PROG_TIMEOUT%TYPE)
RETURN number AS
PRAGMA AUTONOMOUS_TRANSACTION;
v_doresult NUMBER := 1;
v_station SMALL_PROGRAM_STATUS.Station%TYPE;
v_programId SMALL_PROGRAM_STATUS.Program_Id%TYPE;
v_lastActiveTime date;
v_spanMinutes NUMBER;
BEGIN
BEGIN
SELECT Station,
PROGRAM_ID,
Last_Active_Time,
floor(to_number(sysdate - LAST_ACTIVE_TIME) * 24 * 60)
INTO v_station, v_programId, v_lastActiveTime, v_spanMinutes
from SMALL_PROGRAM_STATUS
WHERE STATION = i_customerNo
AND PROGRAM_ID = i_programId
AND floor(to_number(sysdate - LAST_ACTIVE_TIME) * 24 * 60) >
i_timeout;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return 0;
when TOO_MANY_ROWS then
DBMS_OUTPUT.PUT_LINE('More than one record.');
END; merge into SMALL_PROGRAM_TASK t1
using (select i_customerNo as station,
i_programId as program_id,
'N' send_flag
from dual) t2
on (t1.station = t2.station and t1.program_id = t2.program_id and t1.send_flag = t2.send_flag)
when matched then
update
set t1.last_active_time = v_lastActiveTime,
t1.program_timeout = i_timeout,
t1.expired_time = v_spanMinutes,
t1.modify_date = sysdate()
when not matched then
insert
(job_no,
station,
program_id,
last_active_time,
send_flag,
program_timeout,
create_date,
expired_time)
values
(sys_guid(),
v_station,
v_programId,
v_lastActiveTime,
'N',
i_timeout,
sysdate(),
v_spanMinutes);
commit;
DBMS_OUTPUT.PUT_LINE('v_doresult=' || v_doresult);
DBMS_OUTPUT.PUT_LINE('v_station=' || v_station);
DBMS_OUTPUT.PUT_LINE('v_spanMinutes=' || v_spanMinutes);
RETURN v_doresult;
END;
2. 创建procedure
CREATE OR REPLACE PROCEDURE get_expired_program AS
v_timeout TK_CUST_PROG_D.PROG_TIMEOUT%TYPE;
v_customerNo TK_CUST_PROG_D.CUSTOM_NO%TYPE;
v_programId TK_CUST_PROG_D.Prog_Id%TYPE;
v_doresult number;
v_records_sum number := 0;
CURSOR c_cursor IS SELECT CUSTOM_NO,Prog_Id,PROG_TIMEOUT FROM TK_CUST_PROG_D WHERE MONITOR_PROGRAM='Y';
BEGIN
OPEN c_cursor;
LOOP
FETCH c_cursor INTO v_customerNo,v_programId,v_timeout;
EXIT WHEN c_cursor%NOTFOUND;
begin
select GET_TIMEOUT_PROGRAM(v_customerNo,v_programId,v_timeout) into v_doresult from dual;
v_records_sum := v_doresult;
end;
END LOOP;
dbms_output.put_line('records_num: "' || v_records_sum || '"');
CLOSE c_cursor;
END;
3.创建调用定时排程调用这个Procedure,每五分钟调用一次procedure
begin
sys.dbms_scheduler.create_job(job_name => 'PLOEC.GET_EXPIRED_PROGRAM_TASK',
job_type => 'STORED_PROCEDURE',
job_action => 'get_expired_program',
start_date => to_date('06-03-2017 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
repeat_interval => 'Freq=Minutely;Interval=5',
end_date => to_date('07-03-2049 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
job_class => 'DBMS_JOB$',
enabled => true,
auto_drop => false,
comments => '每五分鐘掃呼叫get_expired_program一次');
end;
/
Function或者Procedure在compile时候出错,可以通过以下SQL查看errors detail
show errors function GET_TIMEOUT_PROGRAM;
show errors procedure get_expired_program;
Call Procedure
exec get_expired_program;
Test Function
declare
outNumber number;
begin
select GET_TIMEOUT_PROGRAM('TPE','P0001',90) into outNumber from dual;
dbms_output.put_line('outNumber: "' || outNumber || '"');
end;
View schedule log
SELECT * FROM dba_scheduler_jobs WHERE job_name = 'GET_EXPIRED_PROGRAM_TASK';
FROM
oracle通过job执行procedure的更多相关文章
- oracle job 定时执行 存储过程
oracle job 定时执行 存储过程 一:简单测试job的创建过程案例: 1,先创建一张JOB_TEST表,字段为a 日期格式 SQL> create table JOB_TEST(a ...
- 【转】oracle定制定时执行任务
本节摘要:本节介绍使用oracle自带的job来实现oracle定制定时执行任务. 1.引言 定制定时执行的任务有两种形式,系统级别和数据库级别, 从操作系统级别来讲, windows系统我们可以使用 ...
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: ...
- 基于Oracle的SQL优化(崔华著)-整理笔记-第2章“Oracle里的执行计划”
详细介绍了Oracle数据里与执行计划有关的各个方面的内容,包括执行计划的含义,加何查看执行计划,如何得到目标SQL真实的执行计划,如何查看执行计划的执行顺序,Oracle数据库里各种常见的执行计划的 ...
- Oracle中的执行计划
使用autotrace sqlplus系统参数:SQL> set autotrace trace onSQL> select * from dual;DUM---XExecution Pl ...
- ORACLE数据库查看执行计划的方法
一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等 ...
- oracle定制定时执行任务
1.引言 定制定时执行的任务有两种形式,系统级别和数据库级别, 从操作系统级别来讲, windows系统我们可以使用任务计划来实现, 对于winXP系统,设置步骤如下,开始---设置---控制面板-- ...
- [转载]T-SQL(Oracle)语句查询执行顺序
原文链接:http://blog.sina.com.cn/s/blog_61c006ea0100mlgq.html sql语法的分析是从右到左,where子句中的条件书写顺序,基本上对sql性能没有影 ...
- Oracle sql语句执行顺序
sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...
随机推荐
- [Z] Shell中脚本变量和函数变量的作用域
在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是global的,其作用域从被定 ...
- Asp.net 的工作原理
转:http://www.cnblogs.com/linjiancun/archive/2010/09/14/1825662.html 1.1.1 Asp.net 的工作原理 ...
- leetcode168
public class Solution { private string Convert(int k) { var s = ""; switch (k) { : s = &qu ...
- 关于Web项目出现懒加载异常的解决方案
manytomany关系中,使用 fetch = FetchType.LAZY 来做懒加载,加快些性能.但是却一直出错,原因是session被关闭,要保持session,需要事务. Hibernate ...
- oracle、sqlserver、mysql常用函数对比[to_char、to_number、to_date]
Oracle --> MySQL to_char(sysdat ...
- MySQL 主从同步失败,数据表修复
问题描述: 接到报警称一台 MySQL 从库同步失败.登录服务器查看错误日志信息如下: Last_Error: Error 'Incorrect key file for table './bfcc/ ...
- keepalived之vrrp_script详解
通常情况下,利用keepalived做热备,其中一台设置为master,一台设置为backup.当master出现异常后,backup自动切换为master.当backup成为master后,mast ...
- 微信小程序相关二、css介绍,菜单制作,表单相关,京东注册页面
一.第二天上午 1.1上午因为有其他的课所以没有去这个课,不过下午看复习的时候的概括,讲了DTD,语法特性,css选择器以及权重,还有一些简单的样式 1.2 DTD Docuement Type 声明 ...
- Solo and Mute
[Solo and Mute ] Muting means a transition will be disabled. Soloed transtions are enabled and with ...
- Nginx 相关介绍(Nginx是什么?能干嘛?个人觉得写得比较好的文章,转载过来)
Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...