当前位置:首页 » 存储配置 » oracle定时任务存储过程

oracle定时任务存储过程

发布时间: 2023-03-24 20:36:08

Ⅰ 求大侠帮忙写个ORACLE的存储过程,外加一个定时任务每天0点调用它。

create or replace procere p_MAKE_REPORT_DATA_TMP as
begin
insert into MAKE_REPORT_DATA_TMP
(STATE_DATE,
AREANO,
AREANAME,
CARDTYPE,
CARDTYPENAME,
CHARGETYPE,
CREATE_SEQ,
CARD_ATTR,
CARD_RANGE,
PRINT_SORT,
CARD_FACE_VALUE,
CARD_ACTUAL_VALUE,
CREATE_DATE,
ACTIVE_DATE,
PRE_STATE,
CUR_STATE,
CARD_COUNT,
CHARGE_SUM,
VALUE_SUM)
select trunc(t.state_date),
a.full_area_code areano,
a.areaname areaname, --地区
t.card_type cardtype,
p.type_name cardtypename, --卡类型
t.charge_type chargetype,
t.create_seq,
t.card_attribute,
t.card_range_type,
a.print_sort,
c.charge card_face_value, --卡知雀面额额
c.value card_value, --卡实际金额
trunc(t.create_date) create_date, --创卡时枣兄间
trunc(t.active_date) active_date, --激活时间
t.pre_state pre_state, --前状态
t.state cur_state, --当前状态
count(t.card_id), --卡数
NVL(SUM(c.charge), 0), --面值总额搭岩早
--NVL(SUM(c.value),0) --实际值总额
NVL(SUM(decode(nvl(p.business_type, 0), 1, c.charge, c.value)),
0) --实际值总额
from view_card_acct_data t,
card_type p,
card_charge_type c,
card_area a,
card_attribute b,
card_range_type d
where a.areano = t.card_area
and p.card_type = t.card_type
and c.charge_type = t.charge_type
and b.attribute_id = t.card_attribute
and d.range_type = t.card_range_type
and p.card_type <> '0'
group by trunc(t.state_date),
a.full_area_code,
a.areaname,
t.card_type,
p.type_name,
t.charge_type,
t.create_seq,
t.card_attribute,
t.card_range_type,
a.print_sort,
c.charge,
c.value,
trunc(t.create_date),
trunc(t.active_date),
t.pre_state,
t.state;
commit;
exception
when others then
rollback;
end p_MAKE_REPORT_DATA_TMP;

--- 创建定时任务JOB
declare
v_jobid number;
begin
sys.dbms_job.submit(job => v_jobid,
what => 'p_MAKE_REPORT_DATA_TMP;',
next_date => trunc(sysdate+1),
interval => 'sysdate+1');
commit;
end;

Ⅱ oracle 添加一个计划任务 每天凌晨两点 定时执行一个存储过程 求详细步骤!!急!!

在你的存储过程里面定义一个变量:
v_HH24 CHAR(2) := '00';

begin后面给变量赋值:
v_HH24 := to_char(sysdate, 'HH24');

然后在你执行的代码外羡友核面加上:
IF v_HH24 = '02'兄掘 THEN

你的代码;
end if;
然告游后使用下面的脚本创建job:

begin
sys.dbms_job.submit(job => :job,
what => '你的存储过程名字;',
next_date => to_date('01-06-2013 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'SYSDATE+60/1440');
commit;
end;
/

Ⅲ oracle数据库如何启动时自动执行定时任务job

oracle数据库如何启动时自动执行定时任务job
job定时任务需要依托存储过程。
1、创建存储过程:create or replace procere MYPROC as
begin
insert into TEST values(sysdate);
end;

2、创建job

variable job1 number;
begin
dbms_job.submit(:job1,'MYPROC;',trunc(sysdate+1),'sysdate+1');--从今晚12开始运行,以后每天运行一次
end;

Ⅳ oracle 创建定时任务执行存储过程

可以用图形化界面来创建JOB,如图:在PL/sql的项目DBMS_JOBS中进行新建。

填写好上面标红的地方后,点击应用即可生成计划!

Ⅳ 怎样实现每天自动执行oracle的存储过程一次

用job
oracle定时器调用存储过程
1.创建一个表,为了能清楚看到定时器的运行情况我们创建一个带有日期字段的表
Sql代码
create table job_table(run_time date);

create table job_table(run_time date);
2.创建存储过程
Sql代码
create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;

create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
3.创建job,并且指定为一分钟执行一次
Sql代码
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;

declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.创建之后自动处于运行状态,我们查询job表,看看我们创建的job
Sql代码
select job,broken,what,interval,t.* from user_jobs t;

select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...

参数介绍
job job的唯一标识,自动生成的
broken 是否处于运行状态,N;运行;Y:停止
what 存储过程名称
interval 定义的执行时间

补充:
描述 INTERVAL参数值
每天午夜12点 ''TRUNC(SYSDATE + 1)''
每天早上8点30分 ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''
每星期二中午12点 ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每个月第一天的午夜12点 ''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每个季度最后一天的晚上11点 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6点10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''

Ⅵ oracle中怎么让带有输入参数的存储过程定时执行

两种方法
1。oracle中有 [作业] 功能,创建一个作业,然后,设置定时执行。
2。用系统的[定时任务],定一个时间,然后调用bat文件,从bat中调用oracle的存储过程。

Ⅶ Oracle存储过程中的定时执行方法有哪些

定时执行在linux中有个叫crontag,用于设置周期性被执行的指令。这个不是oracle系统里面的命令,而是linux或Unix系统里面的命令。你可以在linux系统里面定时登陆oracle然后执行你要制定的存储过程。

Ⅷ oracle定时执行怎么执行多个存储过程

定时执行存储过程,需要在job里定义;而执行多个存储过程,则在job中定义多次即可。

运行环境:oracle 10g

1、定义其中一个job

declare
jobnonumber;
begin
dbms_job.submit(11,
what=>'pro_bdc_bh(
to_char(add_months(trunc(sysdate),-1),''yyyy''),
to_char(add_months(trunc(sysdate),-1),''MM''),
''true''
);',
next_date=>sysdate,
Interval=>'TRUNC(sysdate)+1+2/(24)');
commit;
end;

注意:其中pro_bdc_bh为存储过程名称,TRUNC(sysdate) + 1 +2 / (24)为定义的运行时间为每日凌晨2点。

2、然后定义另外一个job

declare
jobnonumber;
begin
dbms_job.submit(11,
what=>'p_test(
to_char(add_months(trunc(sysdate),-1),''yyyy''),
to_char(add_months(trunc(sysdate),-1),''MM''),
''true''
);',
next_date=>sysdate,
Interval=>'TRUNC(sysdate)+1+2/(24)');
commit;
end;

注意:这次运行的存储过程名为p_test,运行时间同样为每日凌晨2点。

3、创建job完成后,可通过具有创建job的账号查询创建是否成功,语句如下:

select*fromuser_jobs;

Ⅸ oracle定时执行存储过程的时间区间问题

目测, 你的存储过程, 需要在 下面这些时刻运行:
1:00
3:00
5:00
7:00
16:00
18:00
20:00
22:00
CREATE OR REPLACE PROCEDURE other_proc
AS
vHour VARCHAR(2);
BEGIN
vHour := TO_CHAR(SYSDATE, 'HH24');
IF vHour = '01' OR vHour = '03' OR vHour = '05' OR vHour = '07'
OR vHour = '16' OR vHour = '18' OR vHour = '20' OR vHour = '22' THEN
-- 调用你那个存储过程.
-- 由于没有代码, 暂时写 NULL;
NULL;
END IF;
END;
/

variable jobno number;
begin
dbms_job.submit(:jobno, 'other_proc;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')');
commit;
end;
/

热点内容
有哪些低配置游戏像王者荣耀 发布:2024-05-03 22:27:11 浏览:243
gp数据库库 发布:2024-05-03 22:12:43 浏览:873
压缩点点 发布:2024-05-03 22:12:33 浏览:380
有哪些编程比赛 发布:2024-05-03 22:03:45 浏览:263
怎么根据配置调整游戏分辨率 发布:2024-05-03 22:02:50 浏览:77
小鸟酱265g资源密码多少啊 发布:2024-05-03 21:32:08 浏览:653
三国战纪游戏华为帐号密码是多少 发布:2024-05-03 21:22:54 浏览:950
变频压缩机启动 发布:2024-05-03 21:17:06 浏览:436
建立云存储 发布:2024-05-03 21:04:03 浏览:76
socket编程php 发布:2024-05-03 20:12:50 浏览:208