job执行存储过程
Ⅰ oracle job执行存储过程问题。
把你的存储过程重新编译一遍
Ⅱ 如何在存储过程/sql语句执行job(作业)
用以下语句是可以执行的
(如果Job名称是 Job_A)
EXEC msdb.dbo.sp_start_job N'Job_A'
注:最好用Try Catch捕捉到错误,因为如果要启动的Job_A不存在的话会报错
如果确定Job名存在的话那就不会有问题
Ⅲ oracle数据库job怎么调用含参数的存储过程
dbms_job.submit(test_job_really,'test_jobproce("zhangsan");',sysdate,'sysdate+1/1440');
改为:
dbms_job.submit(test_job_really,'test_jobproce(''zhangsan'');',sysdate,'sysdate+1/1440');
注意:zhangsan的两边,不是双引号,是两个单引号!
如有帮助,请采纳!
Ⅳ 是不是一个JOB只能定时执行一个存储过程
定时执行存储过程,需要在job里定义;而执行多个存储过程,则在job中定义多次即可。
运行环境:oracle 10g
1、定义其中一个job
1
2
3
4
5
6
7
8
9
10
11
12
13
declare
jobno number;
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
1
2
3
4
5
6
7
8
9
10
11
12
13
declare
jobno number;
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,
Ⅳ 存储过程单独执行没问题,加到job里面就报错
本来存储过程不加Authid Current_User会提示权限不足,然后会出现序列删除成功,但是无法新建的奇怪现象。
加了以后一切正常,但是放在job里面执行后,又出这个问题了,序列删了,但是没有新建。
Ⅵ 各位大虾,job定时问题:job定时执行存储过程,想整点执行,怎么实现啊,
如果是10g的话就用scheler来代替job吧,比job稳定多了。
先解释一下基础概念,scheler 包含了以下几个实体对象
Program -- 提供了scheler 将要运行什么,包含program name,program type(PLSQL块、存储过程、外部程序),program action(具体的程序实体,比如说一个PLSQL块、或者是存储过程的名称、或者是外部程序的路径加名称) 。
Scheles -- 指定何时何种频率来运行job,可以被不同的job重复的利用。比如说我有两个job都要求在每天的凌晨4点运行,那么两个job可以同时指定相同的schele。
Jobs -- 具体的作业的名称,依赖于那个program、schele。也可以不指定program、schele,而直接写入program、schele的相应参数。
Chains -- 把一组program像一个单独的实体连接在一起,作为一个对象。Job可以指向Chains代替单一的program 。这样就能完成类似如下功能:运行A,然后运行B,当A、B都运行成功则运行C,否则运行D。
下面参考文档边看边做。
1.创建一张表 create table scheler_test(id number,instime date);
2.创建一个存储过程,实现往表中插入资料。
create or replace procere p_insSysdate as
id number;
begin
select count(*) into id from scheler_test;
insert into scheler_test values(id,sysdate);
commit;
end;
/
3.创建一个schele,这个仅仅是一个时间上的安排,由DBMS_SCHEDULER.CREATE_JOB调用。这样就可以重用schele,并且schele在时间的安排上强大与原先的JOB 。语法如下:
BEGIN
SYS.DBMS_SCHEDULER.CREATE_SCHEDULE
(
schele_name => 'SCOTT.EVERY_MINUTE'
,start_date => NULL
,repeat_interval => 'FREQ=MINUTELY'
,end_date => NULL
,comments => NULL
);
END;
/
以下给出部分repeat_interval的写法实例,以供参考
EVERY DAY 'FREQ=DAILY;INTERVAL=1'
EVERY MINUTE 'FREQ=MINUTELY;INTERVAL=1'
EVERY 4 HOURS ON THE HOUR 'FREQ=HOURLY;INTERVAL=4;BYMINUTE=0;BYSECOND=0'
1st DAY OF EVERY MONTH 'FREQ=DAILY;BYMONTHDAY=1'
WEEKDAYS AT 7am and 3pm 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=7,15; BYMINUTE=0;BYSECOND=0'
4.创建DBMS_SCHEDULER.CREATE_PROGRAM,指定运行什么样的程序。
BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
program_name => 'SCOTT.PRG_INSSYSDATE'
,program_type => 'STORED_PROCEDURE'
,program_action => 'p_insSysdate'
,number_of_arguments => 0
,enabled => TRUE
,comments => NULL
);
END;
/
Ⅶ oracle job 执行带参数的存储过程;每天定时将A表新产生的数据定期更新到B表中,存储过程有一个时间参数
execute P_JBXX_NSZHDJXXB_NEW(TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss'))
Ⅷ 如何写SQLServer的JOB让它每天定时的执行某个存储过程
create proc p_createjob
@jobname varchar(100), --作业名称
@sql varchar(8000), --要执行的命令
@serverName sysname='', --job server名
@dbname sysname='', --默认为当前的数据库名
@freqtype varchar(6)='day', --时间周期,month 月,week 周,day 日
@fsinterval int=1, --相对于每日的重复次数
@time int=170000 --开始执行时间,对于重复执行的作业,将从0点到23:59分!
Ⅸ 定时执行带参数的存储过程,怎么定义job
/*
查询:
selectjob,broken,what,interval,t.*fromuser_jobst;
jobjob的唯一标识,自动生成的
broken是否处于运行状态,N;运行;Y:停止
what存储过程名称
next_date初次执行时间
interval执行周期
删除:
begindbms_job.remove(jobno);end;
根据what的内容确定其对应的job,并如此执行删除
执行时间例子:
描述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)''
每3秒钟执行一次'sysdate+3/(24*60*60)'
每2分钟执行一次'sysdate+2/(24*60)'
1:每分钟执行
Interval=>TRUNC(sysdate,'mi')+1/(24*60)--每分钟执行
interval=>'sysdate+1/(24*60)'--每分钟执行
interval=>'sysdate+1'--每天
interval=>'sysdate+1/24'--每小时
interval=>'sysdate+2/24*60'--每2分钟
interval=>'sysdate+30/24*60*60'--每30秒
2:每天定时执行
Interval=>TRUNC(sysdate+1)--每天凌晨0点执行
Interval=>TRUNC(sysdate+1)+1/24--每天凌晨1点执行
Interval=>TRUNC(SYSDATE+1)+(8*60+30)/(24*60)--每天早上8点30分执行
3:每周定时执行
Interval=>TRUNC(next_day(sysdate,'星期一'))+1/24--每周一凌晨1点执行
Interval=>TRUNC(next_day(sysdate,1))+2/24--每周一凌晨2点执行
4:每月定时执行
Interval=>TTRUNC(LAST_DAY(SYSDATE)+1)--每月1日凌晨0点执行
Interval=>TRUNC(LAST_DAY(SYSDATE))+1+1/24--每月1日凌晨1点执行
5:每季度定时执行
Interval=>TRUNC(ADD_MONTHS(SYSDATE,3),'q')--每季度的第一天凌晨0点执行
Interval=>TRUNC(ADD_MONTHS(SYSDATE,3),'q')+1/24--每季度的第一天凌晨1点执行
Interval=>TRUNC(ADD_MONTHS(SYSDATE+2/24,3),'q')-1/24--每季度的最后一天的晚上11点执行
6:每半年定时执行
Interval=>ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24--每年7月1日和1月1日凌晨1点
7:每年定时执行
Interval=>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24--每年1月1日凌晨1点执行
相关方法:
修改要执行的操作:dbms_job.what(jobno,'sp_fact_charge_code;');--修改某个job名
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
dbms_job.broken(v_job,true,next_date);--停止一个job,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)。
*/
createorreplaceprocereproc_auto_exec_jobas
begin
declare
jobnumber;
BEGIN
DBMS_JOB.SUBMIT(
JOB=>job,/*自动生成JOB_ID*/
WHAT=>'proc_test_job;',/*需要执行的过程或SQL语句*/
/*NEXT_DATE=>sysdate,*//*初次执行时间,立刻执行*/
/*INTERVAL=>'sysdate+3/(24*60*60)'*//*执行周期-每3秒钟*/
NEXT_DATE=>TRUNC(SYSDATE+1)+(0*60+30)/(24*60), /*初次执行时间,12点30分*/
INTERVAL=>'TRUNC(SYSDATE+1)+(0*60+30)/(24*60)' /*每天12点30分*/
);
COMMIT;
/*dbms_job.submit(job,'proc_test_job;',sysdate,'trunc(sysdate,''mi'')+1/(24*60)');/*执行周期-每1分钟*/
commit;*/
DBMS_JOB.RUN(job);
end;
endproc_auto_exec_job;
beginproc_auto_exec_job;end;
ORACLE 定时执行存储过程