我想做的工作是:利用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????????
我的源码大概如下:
declare
jobno number;
declare
dbms_job.submit(jobno,'
declare
--以下代码为创建索引过程,省略....
end;',sysdate,'sysdate');
commit;
dbms_job.run(jobno,true);
dbms_job.remove(jobno);
end;但执行完后报错,说是不能执行Job????????
解决方案 »
- 急,监听程序当前无法识别连接描述符中所给出的sid
- ORACLE10G 含有CLOB字段的表导入另外一个10G数据库时,换一个表空间
- 触发器之错
- sql 执行计划 view是什么意思啊
- ORCAL 数据库的服务端该如何配置
- Oralce存储过程,先进先出计算原价
- 大家好,我是新手,应该按照ORACLE 10G-win32-db吗?
- ORA-04092: cannot COMMIT or ROLLBACK in a trigger????
- 请问怎样用SQL命令在SQL Plus建立一个新的数据库.
- oracle 的存储过程不能像sql server一样在存储过程执行后返回结果集合?
- 50分紧急求救,不够说话:oracle会话问题:1.oracle8i中是不是可以自动杀掉inactive session,如果可以,怎么操作2.oracle8i设置会话数目有没
- Oracle DS Forms 为何运行不了
jobno number;
declare
dbms_job.submit(jobno,'
declare
--以下代码为创建索引过程,省略....
end;',sysdate,'sysdate - 10');
commit;
dbms_job.run(jobno,true);
dbms_job.remove(jobno);
end;
jobno number;
declare
dbms_job.submit(jobno,'
declare
--以下代码为创建索引过程,省略....
end;',sysdate,'null');
commit;
dbms_job.run(jobno,true);
dbms_job.remove(jobno);
end;
commit
run
remove
jobno number;
declare
dbms_job.submit(jobno,'
declare
--以下代码为创建索引过程,省略....
end;',sysdate,'null');
commit;
dbms_job.run(jobno,true);
dbms_job.remove(jobno);
end;
用null,也不行,错误为‘不能执行job'
如果我去掉remove,则可以!但job将定期执行。这样显然不行!
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.
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
----------
321: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>
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;
create index i11111 on table(geom) indextype is mdsys.spatial_index parameters('sdo=2')
因为submit的第二个参数是个pl/sql,要用'包起来,则在''里面的块如果也要用到'(直接写),将出错,好像是两个'表示一个'.
说实话我也不知道只是否又理论根据,但执行时没出错,且用dbms_output打出来,好像也时对的
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
'create index i11111 on table(geom) indextype is mdsys.spatial_index parameters('||''''||'sdo=2'||''''||')';
还有很多额外的工作要做,这些与Job无关。空间索引一般的是不会涉及的!
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>
我按照你的方法也试了,效果合你的一样。
你的建议?
先把分给你,主意接受