DBMS_JOB.SUBMIT(:jobno,//job号
'your_procedure;',//要执行的过程
trunc(sysdate)+1/24,//下次执行时间
'trunc(sysdate)+1/24+1'//每次间隔时间
);
删除job:dbms_job.remove(jobno);
修改要执行的操作:job:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);例子:
create or replace procedure procdemo as
begin
delete from leave_word where title like '%..%' or content like '%..%';
commit;
end procdemo;
/
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;',
SYSDATE, 'trunc(SYSDATE) + 1');--每天00:00点删除一次
commit;
end;
/
'your_procedure;',//要执行的过程
trunc(sysdate)+1/24,//下次执行时间
'trunc(sysdate)+1/24+1'//每次间隔时间
);
删除job:dbms_job.remove(jobno);
修改要执行的操作:job:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);例子:
create or replace procedure procdemo as
begin
delete from leave_word where title like '%..%' or content like '%..%';
commit;
end procdemo;
/
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;',
SYSDATE, 'trunc(SYSDATE) + 1');--每天00:00点删除一次
commit;
end;
/
把init<sid>.ora中如下两个参数打开
JOB_QUEUE_INTERVAL=60
JOB_QUEUE_PROCESSES=4
job_queue_keep_connections=true 然后重启一个库,如果原来已经打开了则不用这步了
CREATE OR REPLACE PROCEDURE "WZW_TEST"."MY_PROC" (lv_a,lv_b)
as
v_a char(10);
v_b char(10);
begin
select a,b into v_a,v_b from test;
end my_proc;
我在oracle dba studio 中以WZW_TEST登陆,在“方案-过程”里面将改语句创建后,没有错误,可是当我打开编辑的时候,按“编译”按钮后,状态总是显示invalid,我的test表属于WZW_TEST,请你们给帮助分析一下,难道不能以WZW_TEST用户创建存储过程?我的WZW_TEST用户角色为:connect,exp_full_database,imp_full_database,resource;系统权限为unilimted tablespace.
grant resource to wzw_test;
sql*plus里面用show error查看
2 v_a char(10);
3 v_b char(10);
4 begin
5 select a,b into v_a,v_b from test;
6 end my_proc;
7 /警告: 创建的过程带有编译错误。SQL> show error;
没有错误。
2 lv_b varchar2)
3 as
4 v_a varchar2;
5 v_b varchar2;
6 begin
7 select a,b into v_a,v_b from test;
8 end my_proc;
9 /警告: 创建的过程带有编译错误。SQL> show error
没有错误。
select a,b from test;
这条语句在sql*plus里面可以运行吧?
SQL> select * from test where rownum<=5;A B C
---------- ---------- ----------
1 2 3
1 1 2
1 1 1
1 2 2
1 6 8
重新打开sql*plus
执行看看
然后show error;
2 lv_b varchar2)
3 as
4 v_a varchar2;
5 v_b varchar2;
6 begin
7 select a,b into v_a,v_b from test;
8 end my_proc;
9 /警告: 创建的过程带有编译错误。SQL> show error
没有错误。
我将创建改表的语句给您,麻烦帮助分析一下,到底怎么回事?
CREATE TABLE "WZW_TEST"."TEST"("A" VARCHAR2(10) NOT NULL, "B"
VARCHAR2(10) NOT NULL, "C" VARCHAR2(10) NOT NULL) ;insert into test values('1','2','3');
insert into test values('1','22','33');
insert into test values('1','222','333');
还是没有错误!
13:25:23 2 as
13:25:23 3 v_a test.a%type;
13:25:45 4 v_b test.b%type;
13:25:53 5 begin
13:25:56 6 select a,b into v_a,v_b from test;
13:25:56 7 end my_proc;
13:25:56 8 / 过程已创建。已用时间: 00: 00: 00.34
13:25:57 SQL>
exec MY_PROC('a','b');实际上,对于这个存储过程的例子来说,两个传入参数都没有什么作用。
varchar2,lv_b varchar2)
as
v_a varchar2(10);
v_b varchar2(10);
begin
select a,b into v_a,v_b from test where rownum<=1;
end my_proc; 执行如下SQL> exec my_proc('a','b');PL/SQL 过程已成功完成。可是我没看到执行结果怎么办?
varchar2,lv_b varchar2)
as
v_a varchar2(10);
v_b varchar2(10);
begin
select a,b into v_a,v_b from test where rownum <=1;
dbms_output.put_line('v_a:'||v_a||' v_b:'||v_b);
end my_proc;
/set server output on;exec my_proc('a','b');
begin
delete from test where a='wzw';
commit;
end dele_test;
能执行,但是我现在想让它30秒执行一次,是不是按照您给我的例子:
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;',
SYSDATE, 'trunc(SYSDATE) + 30/(60*24*60)'
commit;
end;
/变成这样的?