oracle存储过程执行时间
❶ oracle存储过程按时间调用
用dbms_job包,以下是例子。
declare
n_job_01 binary_integer;
begin
-- 每分钟执行一次
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(sysdate,’mi’) + 1 / (24*60)');
-- 凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(sysdate) + 1 + 2/24');
-- 每周一凌晨2点执行 周一是每周的第二天next_day(sysdate,2)同理周二是第三天,next_day(sysdate,3)
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(next_day(sysdate,2))+2/24');
-- 每月1日凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+2/24');
-- 每季第一天凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24');
-- 每年7月1日和1月1日凌晨2点
dbms_job.submit(n_job_01,'你调的东西',sysdate,'ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24');
-- 每年1月1日凌晨2点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate, 'Add_months(trunc(sysdate,'yyyy'), 12) +2/24');
end;
❷ oracle中怎么用存储过程将的存储过程的执行时间返回出去。
可以在日志表中加一个运行时间字段,可以在程序运行之前设定一定变量值为sysdate,程序运行结尾出一个变量2 sysdate , 两个变量相减就可以得到过程运行时间.
begin
v_date1:= sysdate;
...
v_date2:=sysdate;
v_run_num=v_date2-v_dat1;
insert into 日志表(run_num_time) values(v_run_num);
commit;
❸ 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中如何得到执行存储过程的开始和结束时间
需要在存储过程中定义的时候把开始执行时间和结束时间打印出来。
举例如下:
创建存储过程:
createorreplaceprocerep_test
as
v_begintimevarchar2(20);
v_endtimevarchar2(20);
v_strvarchar2(10);
begin
v_begintime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');
select'badkano'intov_strfromal;
v_endtime:=to_char(sysdate,'yyyy-mm-ddhh24:mi:ss');
dbms_output.put_line('开始时间为:'||v_begintime);
dbms_output.put_line('结束时间为:'||v_endtime);
end;
end;
执行存储过程:
begin
p_test;
end;
执行结果:
说明:由于样例存储过程过于简单,但在进行过多数据处理的时候,看到的结果会比较明显。
❺ oracle存储过程时间调用
用dbms_job包,以下是例子。
declare
n_job_01 binary_integer;
begin
-- 每分钟执行一次
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(sysdate,’mi’) + 1 / (24*60)');
-- 凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(sysdate) + 1 + 2/24');
-- 每周一凌晨2点执行 周一是每周的第二天next_day(sysdate,2)同理周二是第三天,next_day(sysdate,3)
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(next_day(sysdate,2))+2/24');
-- 每月1日凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+2/24');
-- 每季第一天凌晨两点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate,'TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24');
-- 每年7月1日和1月1日凌晨2点
dbms_job.submit(n_job_01,'你调的东西',sysdate,'ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24');
-- 每年1月1日凌晨2点执行
dbms_job.submit(n_job_01,'你调的东西',sysdate, 'Add_months(trunc(sysdate,'yyyy'), 12) +2/24');
end;
打字不易,如满意,望采纳。
❻ Oracle中存储过程如何设置等待特定时长之后再执行sql
oraclejob有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。。
每秒钟执行次Interval=>sysdate+1/(24*60*60),如果改成sysdate+10/(24*60*60)就是10秒钟执行,每分钟执行Interval=>TRUNC(sysdate,'mi')+1/(24*60)如果改成TRUNC(sysdate,'mi')+10/(24*60)就是每10分执行次每天定时执行例如:每天的凌晨1点执行Interval=>TRUNC(sysdate)+1+1/(24)。
❼ 如何查看Oracle中sql语句的执行时间
通过Oracle执行计划可以看到SQL的执行时间。
EXPLAIN PLAN FOR
SELECT * FROM table;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
SQL>set timing on --显示执行时间
SQL>set autorace on ?C显示执行计划
SQL>set autorace on ?C显示执行计划
SQL>set autotrace traceonly ?C只显示执行计划即不显示查询出来的数据
设置完毕后执行SQL语句就会显示执行时间。
❽ oracle存储过程执行速度很慢是什么原因
解决办法:你需要对你的表根据查询条件设计相应的索引,有时候根据需要可能一个表你需要建立好几个索引都是有可能的。然后再执行,你会发现原来要30几秒的现在零点几秒就可以搞定了,这跟使用游标没什么关系。游标的使用完全由你的应用需要决定,我相信能不用的你肯定不会选择使用游标处理,一般是实在没办法的情况下才选择游标去做。 你查询慢的原因是你在存储过程中执行的话,没有索引时,他会一条一条查知道把80几万条数据全部扫描一遍直到查完了你才看到一个结果,但是你在外面单独执行很快的原因是plsql他会首先去查查到几条数据就先给你返回来,所以你马上就看到结果了,但实际上查询也并没有结束,你要是数据很多的情况下你往下拉,你会发信很慢,其实查询过程根本就还没有结束。 总之写存储过程第一步是会写,第二步是要做好优化,否则当你的数据量很大的时候你的过程写的不好的话问题会马上暴露出来
❾ 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;
/
❿ oracle中一个存储过程定时执行,想在一个窗口中下次执行查看时间
建立一个JOB。把时间写好就行。 用PLSQL DEVELOPE 工具书中有图形界面可以新建一个JOB。
就是定义一下名称,调用存储过程名,执行间隔。