如何让job仅仅执行一次???

如何让job仅仅执行一次?????
[17 byte] By [fake_wolf-狼] at [2007-12-16]
# 1
执行后删除不就可以了吗?
bluecetacean-剑鱼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 2
我想做的工作是:利用job执行创建索引的工作,在创建完后自动删除索引!
我的源码大概如下:
declare
jobno number;
declare
dbms_job.submit(jobno,'
declare
--以下代码为创建索引过程,省略...
end;',sysdate,'sysdate');
commit;
dbms_job.run(jobno,true);
dbms_job.remove(jobno);
end;

但执行完后报错,说是不能执行Job????
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 3
declare
jobno number;
declare
dbms_job.submit(jobno,'
declare
--以下代码为创建索引过程,省略...
end;',sysdate,'sysdate - 10');
commit;
dbms_job.run(jobno,true);
dbms_job.remove(jobno);
end;
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 4
declare
jobno number;
declare
dbms_job.submit(jobno,'
declare
--以下代码为创建索引过程,省略...
end;',sysdate,'null');
commit;
dbms_job.run(jobno,true);
dbms_job.remove(jobno);
end;
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 5
submit
commit
run
remove
jiezhi-风满袖 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 6
declare
jobno number;
declare
dbms_job.submit(jobno,'
declare
--以下代码为创建索引过程,省略...
end;',sysdate,'null');
commit;
dbms_job.run(jobno,true);
dbms_job.remove(jobno);
end;
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 7
如何让一个job在制定的那个时间点运行一次后被删除???
angowb at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 8
to jlandzpa:sysdate-10 不行,不能用将来的时间作为间隔。
用null,也不行,错误为‘不能执行job'
如果我去掉remove,则可以!但job将定期执行。这样显然不行!
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 9
文档中是说:

The interval parameter must evaluate to a time in the future. Legal intervals include:

'sysdate + 7'
Run once a week.

'next_day(sysdate,''TUESDAY'')'
Run once every Tuesday.

'null'
Run only once.

If interval evaluates to NULL and if a job completes successfully, then the job is automatically deleted from the queue.
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 10
去掉remove,应该是可以的.
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 11
如何让一个job在制定的那个时间点运行一次后被删除???
angowb at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 12
to jlandzpa(欧高黎嘉陈):对,根据文档,用null的确是执行一次,而且我用简单的插入语句也证明了这一点,但不知道为什么,在建索引时不行,本身submit执行成功,但Job一直不能删除。估计是建索引语句错了,但单独那出建索引语句可以执行成功.怎么回事?
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 13
晚上测试一下.
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 14
有谁能帮帮我
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 15
我来了。。。。。。
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 16
怎么样?行吗
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 17
--没有问题。

21:39:14 jlanzpa817>create or replace procedure jl_1 as
21:39:14 2 begin
21:39:14 3 execute immediate 'create index ind_tname on test (tname)';
21:39:14 4 dbms_output.put_line(1);
21:39:14 5 end;
21:39:14 6 /

过程已创建。

已用时间: 00: 00: 00.61
21:39:15 jlanzpa817>drop index ind_tname;
drop index ind_tname
*
ERROR 位于第 1 行:
ORA-01418: 指定的索引不存在

已用时间: 00: 00: 00.40
21:39:21 jlanzpa817>VARIABLE jobno number;
21:39:27 jlanzpa817>BEGIN
21:39:27 2 DBMS_JOB.SUBMIT(:jobno,
21:39:27 3 'jl_1;',SYSDATE, 'null');
21:39:27 4 commit;
21:39:27 5 END;
21:39:28 6 /

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.20
21:39:29 jlanzpa817>
21:39:39 jlanzpa817>print jobno

JOBNO
----------
3

21:39:39 jlanzpa817>drop index ind_tname;

索引已丢弃。

已用时间: 00: 00: 00.30
21:39:45 jlanzpa817>exec dbms_job.remove(3);
BEGIN dbms_job.remove(3); END;

*
ERROR 位于第 1 行:
ORA-23421: 作业编号3在作业队列中不是一个作业
ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 86
ORA-06512: 在"SYS.DBMS_IJOB", line 525
ORA-06512: 在"SYS.DBMS_JOB", line 166
ORA-06512: 在line 1

已用时间: 00: 00: 00.40
21:39:54 jlanzpa817>
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 18
你的版本是多少? 在创建索引时,别人还动不动数据?
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 19
8.16,创建索引时,别人不会栋数据
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 20
我这里很正常,只运行了一次,索引也创建成功了.
能否把建索引那段贴出来了吗?
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 21
我创建的是空间索引:
declare
jobno number;
begin
dbms_job.submit(jobno,'
declare
stmt varchar2(400)
stmt := ''create index i11111 on table(geom) indextype is mdsys.spatial_index '' || ''parameters(''''sdo=2'''')'';
execute immediate stmt;
end;',sysdate );
commit;
end;
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 22
要不,把你试验的东东贴上来看看!
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 23
stmt := ''create index i11111 on table(geom) indextype is mdsys.spatial_index '' || ''parameters(''''sdo=2'''')'';

这是什么语法,我还没有见过.
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 24
正真的创建索引是:
create index i11111 on table(geom) indextype is mdsys.spatial_index parameters('sdo=2')
因为submit的第二个参数是个pl/sql,要用'包起来,则在''里面的块如果也要用到'(直接写),将出错,好像是两个'表示一个'.
说实话我也不知道只是否又理论根据,但执行时没出错,且用dbms_output打出来,好像也时对的

fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 25
? 我为什么运行不了?

22:10:03 jlanzpa817>create index i11111 on
22:11:12 2 table(test) indextype is mdsys.spatial_index parameters('tname=2');
table(test) indextype is mdsys.spatial_index parameters('tname=2')
*
ERROR 位于第 2 行:
ORA-00903: 无效表名

已用时间: 00: 00: 00.20
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 26
--try this
'create index i11111 on table(geom) indextype is mdsys.spatial_index parameters('||''''||'sdo=2'||''''||')';
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 27
这是有关空间数据库的问题,我刚才仅仅是写了创建的语法,正真要让这个sql成功
还有很多额外的工作要做,这些与Job无关。空间索引一般的是不会涉及的!
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 28
--我也查到了,改成上面应该没有问题,注意索引如果存在需要先删除.

22:11:13 jlanzpa817>create or replace procedure jl_1 as
22:16:26 2 stmt varchar2(200);
22:16:26 3 begin
22:16:26 4 stmt := 'create index i11111 on table(geom) indextype is mdsys.spatial_index parameter
s('||''''||'sdo=2'||''''||')';
22:16:26 5 --execute immediate 'create index ind_tname on test (tname)';
22:16:26 6 dbms_output.put_line(stmt);
22:16:26 7 end;
22:16:26 8 /

过程已创建。

已用时间: 00: 00: 00.80
22:16:27 jlanzpa817>exec jl_1
create index i11111 on table(geom) indextype is mdsys.spatial_index
parameters('sdo=2')

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.50
22:16:32 jlanzpa817>
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 29
我不是很明白你的意思?
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 30
其实只是你的sql生成的写法不对,上面我的写法output之后是正确的,如果你给我的sql在sqlplus中可以运行的话,那么你照上面改一下,在job中也应该是正确的.
jlandzpa-jlandzpa at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 31
哥们,谢谢,我回去后试一试,明天给你加分!谢谢!
我得回去了!明天见
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 32
to jlandzpa(欧高黎嘉陈):哥们,还是不行。其实我的语法也是对的,因为索引其实已经创建了,只不过索引创建的又问题。
我按照你的方法也试了,效果合你的一样。
你的建议?
先把分给你,主意接受
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...
# 33
to jlandzpa(欧高黎嘉陈):你在吗
fake_wolf-狼 at 2007-10-23 > top of Msdn China Tech,Oracle,基础和管理...