关于JOBS的一个问题

appleric 2009-12-04 08:02:02
我现在用的是PL/SQL。我写了几个过程,然后想在每天早上的八点周跑这几个过程,现在问题就来了。
是不是一个JOBS只能针对一个过程来执行呢?
(个人想想应该没那么笨吧,写同样的jobs N个,太累了,也太累赘了。)
所以,想请教有哪位XDJM知道的,告小弟一声,在此谢过了。
...全文
81 点赞 收藏 18
写回复
18 条回复
appleric 2009年12月08日
结贴。
crazylaa 回答的是正确的。
后来经过我再次的实验是可行的。

vc555 给出了相对应的实例。
回复 点赞
appleric 2009年12月07日
不好意思,最近在忙别的,没啥时间上~~
谢谢大家的回复。我试出来后,一定来结贴。
再次谢过各位哈
回复 点赞
tKF12183 2009年12月05日
[Quote=引用 2 楼 tkf12183 的回复:]
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分别是你要执行的过程,用;隔开。。。如果有参数要带上。。。
[/Quote]

这个在9I和11G都是可以的。。。我们正在使用的。。。低版本的没环境,没试过。
回复 点赞
duqiangcise 2009年12月05日
在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;
回复 点赞
appleric 2009年12月04日
[Quote=引用 5 楼 appleric 的回复:]
回复 4#

我的存储过程是不带参数的那种。
你的意思是不是让我再写个新的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;
/

我理解的你的意思是这样的,但是貌似还是不行啊!?麻烦能解释下嘛?谢谢
[/Quote]

这就是我写的呀~~可是跑不起来~~晕死,。也不知道是为啥呢?!
回复 点赞
duqiangcise 2009年12月04日
你可以写一个专门的过程(如test_proc)来包含其他你要执行的所有过程,然后再job中调用test_proc.
回复 点赞
vc555 2009年12月04日
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: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

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

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

已选择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行。
回复 点赞
appleric 2009年12月04日
回复 点赞
vc555 2009年12月04日
8i吧?不会是8吧?
回复 点赞
vc555 2009年12月04日
哦。那我看看。
回复 点赞
appleric 2009年12月04日
不好意思,版本不高。就8而已那
回复 点赞
tKF12183 2009年12月04日
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分别是你要执行的过程,用;隔开。。。如果有参数要带上。。。
回复 点赞
vc555 2009年12月04日
满足你的各种要求,功能远胜job
回复 点赞
vc555 2009年12月04日
oralce啥版本?
10g的话用SCHEDULE,这个已经替代job了。
回复 点赞
appleric 2009年12月04日
回复 4#

我的存储过程是不带参数的那种。
你的意思是不是让我再写个新的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;
/

我理解的你的意思是这样的,但是貌似还是不行啊!?麻烦能解释下嘛?谢谢
回复 点赞
horizonlyhw 2009年12月04日
把你要執行的 放到一個function裡面 然後再用job執行 這個“綜合體”就行了啊
回复 点赞
crazylaa 2009年12月04日
你的这几个存储过程是否带参数?如果带参数,你得用这种方法:

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;
回复 点赞
appleric 2009年12月04日
回复1#的horizonlyhw
请问这个函数该如何写?!能否给个例子或者点提示啥滴。!

回复2#的tKF12183
我尝试过的,这样是不行的。

在此谢过上面两位
回复 点赞
发动态
发帖子
基础和管理
创建于2007-09-28

7175

社区成员

9.5w+

社区内容

Oracle 基础和管理
社区公告
暂无公告