关于JOBS的一个问题 我现在用的是PL/SQL。我写了几个过程,然后想在每天早上的八点周跑这几个过程,现在问题就来了。是不是一个JOBS只能针对一个过程来执行呢?(个人想想应该没那么笨吧,写同样的jobs N个,太累了,也太累赘了。)所以,想请教有哪位XDJM知道的,告小弟一声,在此谢过了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把你要執行的 放到一個function裡面 然後再用job執行 這個“綜合體”就行了啊 DECLARE X NUMBER;begin sys.dbms_job.submit(job => X, what => 'a;b;c;', next_date => sysdate, interval => 'trunc(sysdate)+8/24'); commit;end;/--说明:a,b,c分别是你要执行的过程,用;隔开如果有参数要带上 回复1#的horizonlyhw请问这个函数该如何写?!能否给个例子或者点提示啥滴。!回复2#的tKF12183我尝试过的,这样是不行的。在此谢过上面两位 你的这几个存储过程是否带参数?如果带参数,你得用这种方法:a:='job_test('输入变量');'sys.dbms_job.submit(job1,a,sysdate,'sysdate+1/1440');如果有多个存储过程,你最好创建一个不带参数得存储过程,里面调用这些存储过程。不过里面应该是顺序执行的,你要同时开跑,可能还是得创建一堆job了create or replace procedure ....begin exec proc1('1'); exec proc2('2');end; 回复 4# 我的存储过程是不带参数的那种。你的意思是不是让我再写个新的products,将那些定点执行的存储过程写入新的products中。NEW products:create or replace procedure SP_RUN_8 isbegin SP_STA_RD_CTN_EFFI; //四个SP是我要定点执行的存储过程 SP_STA_GKX_CTN; SP_STA_TRANSTERMINAL; SP_STA_DAILY_CY;end SP_RUN_8;NEW JOBS:begin sys.dbms_job.submit(job => :job, what => 'SP_RUN_8;', next_date => to_date('04-12-2009 21:46:00', 'dd-mm-yyyy hh24:mi:ss'), interval => 'TRUNC(sysdate,''mi'') + 1 / (24*60)'); commit;end;/我理解的你的意思是这样的,但是貌似还是不行啊!?麻烦能解释下嘛?谢谢 oralce啥版本?10g的话用SCHEDULE,这个已经替代job了。 满足你的各种要求,功能远胜job OPER@tl> create table test(aaa date,bbb date);表已创建。OPER@tl> create or replace procedure p1 2 as 3 begin 4 insert into test(aaa) values(sysdate); 5 commit; 6 end; 7 /过程已创建。OPER@tl> create or replace procedure p2 2 as 3 begin 4 insert into test(bbb) values(sysdate); 5 commit; 6 end; 7 /过程已创建。OPER@tl> create or replace procedure p12 2 as 3 begin 4 p1; 5 p2; 6 end; 7 /过程已创建。OPER@tl> declare 2 i number; 3 begin 4 dbms_job.submit(i,'p12;',sysdate,'sysdate+1/3600/24'); 5 end; 6 /PL/SQL 过程已成功完成。OPER@tl> commit;提交完成。OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:29OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:29OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:292009-12-04 22:30:34 2009-12-04 22:30:34已选择7行。OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:292009-12-04 22:30:34 2009-12-04 22:30:34已选择7行。OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:292009-12-04 22:30:34 2009-12-04 22:30:34已选择7行。OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:292009-12-04 22:30:34 2009-12-04 22:30:342009-12-04 22:30:39 2009-12-04 22:30:39已选择9行。OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:292009-12-04 22:30:34 2009-12-04 22:30:342009-12-04 22:30:39 2009-12-04 22:30:39已选择9行。OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:292009-12-04 22:30:34 2009-12-04 22:30:342009-12-04 22:30:39 2009-12-04 22:30:39已选择9行。OPER@tl> select * from test;AAA BBB------------------- -------------------2009-12-04 22:30:142009-12-04 22:30:192009-12-04 22:30:242009-12-04 22:30:29 2009-12-04 22:30:292009-12-04 22:30:34 2009-12-04 22:30:342009-12-04 22:30:39 2009-12-04 22:30:392009-12-04 22:30:44 2009-12-04 22:30:44已选择11行。 你可以写一个专门的过程(如test_proc)来包含其他你要执行的所有过程,然后再job中调用test_proc. 在SQLPLUS中执行:variable job number;begin sys.dbms_job.submit(:job,'SP_RUN_8;', to_date('04-12-2009 21:46:00', 'dd-mm-yyyy hh24:mi:ss'),'TRUNC(sysdate,''mi'') + 1 / (24*60)'); commit; end; 结贴。 crazylaa 回答的是正确的。后来经过我再次的实验是可行的。vc555 给出了相对应的实例。 IMP-00041: 警告: 创建的对象带有编译警告....帮忙看一看,网上找不到解 oracle10.2 在fedora 7 安装成功后的几点疑惑,需要请教各位前辈?? 如何检索存储过程或包中的匹配字段? 帮一帮,各位大哥 请教一个数据合并的sql语句 简单触发器问题,执行就出错,编译没问题 各位来看看初学者的一个简单问题:在哪里置在环境变量classpath? 什么地方可以下载ODP.NET? 字段varchar到nvarchar时,怎么将数据后面的空格去掉? 关于安装ORACLE9I的简单问题! 求教,误删表,求恢复! 插入新表出错,在线等!
X NUMBER;
begin
sys.dbms_job.submit(job => X,
what => 'a;b;c;',
next_date => sysdate,
interval => 'trunc(sysdate)+8/24');
commit;
end;
/--说明:a,b,c分别是你要执行的过程,用;隔开如果有参数要带上
请问这个函数该如何写?!能否给个例子或者点提示啥滴。!回复2#的tKF12183
我尝试过的,这样是不行的。在此谢过上面两位
sys.dbms_job.submit(job1,a,sysdate,'sysdate+1/1440');如果有多个存储过程,你最好创建一个不带参数得存储过程,里面调用这些存储过程。
不过里面应该是顺序执行的,你要同时开跑,可能还是得创建一堆job了
create or replace procedure ....
begin
exec proc1('1');
exec proc2('2');
end;
我的存储过程是不带参数的那种。
你的意思是不是让我再写个新的products,将那些定点执行的存储过程写入新的products中。
NEW products:
create or replace procedure SP_RUN_8 is
begin
SP_STA_RD_CTN_EFFI; //四个SP是我要定点执行的存储过程
SP_STA_GKX_CTN;
SP_STA_TRANSTERMINAL;
SP_STA_DAILY_CY;
end SP_RUN_8;NEW JOBS:
begin
sys.dbms_job.submit(job => :job,
what => 'SP_RUN_8;',
next_date => to_date('04-12-2009 21:46:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
commit;
end;
/我理解的你的意思是这样的,但是貌似还是不行啊!?麻烦能解释下嘛?谢谢
10g的话用SCHEDULE,这个已经替代job了。
2 as
3 begin
4 insert into test(aaa) values(sysdate);
5 commit;
6 end;
7 /过程已创建。OPER@tl> create or replace procedure p2
2 as
3 begin
4 insert into test(bbb) values(sysdate);
5 commit;
6 end;
7 /过程已创建。OPER@tl> create or replace procedure p12
2 as
3 begin
4 p1;
5 p2;
6 end;
7 /过程已创建。OPER@tl> declare
2 i number;
3 begin
4 dbms_job.submit(i,'p12;',sysdate,'sysdate+1/3600/24');
5 end;
6 /PL/SQL 过程已成功完成。OPER@tl> commit;提交完成。OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29
2009-12-04 22:30:34
2009-12-04 22:30:34已选择7行。OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29
2009-12-04 22:30:34
2009-12-04 22:30:34已选择7行。OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29
2009-12-04 22:30:34
2009-12-04 22:30:34已选择7行。OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29
2009-12-04 22:30:34
2009-12-04 22:30:34
2009-12-04 22:30:39
2009-12-04 22:30:39已选择9行。OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29
2009-12-04 22:30:34
2009-12-04 22:30:34
2009-12-04 22:30:39
2009-12-04 22:30:39已选择9行。OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29
2009-12-04 22:30:34
2009-12-04 22:30:34
2009-12-04 22:30:39
2009-12-04 22:30:39已选择9行。OPER@tl> select * from test;AAA BBB
------------------- -------------------
2009-12-04 22:30:14
2009-12-04 22:30:19
2009-12-04 22:30:24
2009-12-04 22:30:29
2009-12-04 22:30:29
2009-12-04 22:30:34
2009-12-04 22:30:34
2009-12-04 22:30:39
2009-12-04 22:30:39
2009-12-04 22:30:44
2009-12-04 22:30:44已选择11行。
variable job number;
begin
sys.dbms_job.submit(:job,'SP_RUN_8;', to_date('04-12-2009 21:46:00', 'dd-mm-yyyy hh24:mi:ss'),'TRUNC(sysdate,''mi'') + 1 / (24*60)');
commit;
end;
crazylaa 回答的是正确的。
后来经过我再次的实验是可行的。vc555 给出了相对应的实例。