问题描述:
删除job语句如下:EXEC dbms_job.remove(:jobno);
执行时报ORA-01008错误:并非所有变量都已绑定。
创建该job的语句如下:
-------------------
declare
jobno number;
begin
sys.dbms_job.submit(jobno,'change_date;',sysdate,'sysdate+1/1440');
commit;--必须有commit,如果没有是查不到该job的!!!
end;
/
--------------------
解决办法:
这个可以通过查出该job的作业号,然后直接指定job号删除即可:
EXEC dbms_job.remove(23);
分析:
使用另外一种创建job的方法,便可以直接调用EXEC dbms_job.remove(:jobno);将该作业删除。
创建job语句如下:
variable jobno number;
begin
sys.dbms_job.submit(job => :jobno,
what => 'change_date;',
next_date => to_date('18-11-2013', 'dd-mm-yyyy'),
interval => 'sysdate+1/1440');--每天1440分钟,即一分钟运行change_date过程一次
commit; --必须有commit,如果没有是查不到该job的!!!
end;
/
这两种创建job的区别仅仅是jobno的定义方式不同:
第一种是declare出的变量
第二种是variable出的变量
在网上一搜发现两者作用域不同:
variable相当于一个sql*plus环境的全局变量,declare里定义的是pl/sql中的局部变量。
这样就好理解了,第一种创建方式中的jobno是局部变量,只在PL/SQL块里有效,所以后来调用
EXEC dbms_job.remove(:jobno);删除时报变量未绑定。