在plsql开发工具中,对oracle操作。
SQL> create or replace procedure PRCO_CWGL_DSTJ as
2 begin
3 insert into cw0623 select * from cw0622;
4 --commit;
5 --to_date('20110731010100','yyyy-mm-dd hh24:mi:ss'),
6 --'ADD_MONTHS(trunc(sysdate,'yyyy'),7) + 1/24'
7 --'ADD_MONTHS(trunc(sysdate,'yyyy'),8) +28+ 14/24'
8 --);
9 end;
10 /
Procedure createdSQL> variable nob number;
SQL>
SQL> begin
2 dbms_job.submit(:nob,'PRCO_CWGL_DSTJ',sysdate,'SYSDATE + 3/1440');
3
4 end;
5 /ORA-06550: 第 1 行, 第 108 列:
PLS-00103: 出现符号 "END"在需要下列之一时:
:= . ( @ % ;
符号 ";" 被替换为 "END" 后继续。
ORA-06512: 在 "SYS.DBMS_JOB", line 79
ORA-06512: 在 "SYS.DBMS_JOB", line 136
ORA-06512: 在 line 3
nob
---------这是什么错误。我快疯了。
神啊,就我啊。
SQL> create or replace procedure PRCO_CWGL_DSTJ as
2 begin
3 insert into cw0623 select * from cw0622;
4 --commit;
5 --to_date('20110731010100','yyyy-mm-dd hh24:mi:ss'),
6 --'ADD_MONTHS(trunc(sysdate,'yyyy'),7) + 1/24'
7 --'ADD_MONTHS(trunc(sysdate,'yyyy'),8) +28+ 14/24'
8 --);
9 end;
10 /
Procedure createdSQL> variable nob number;
SQL>
SQL> begin
2 dbms_job.submit(:nob,'PRCO_CWGL_DSTJ',sysdate,'SYSDATE + 3/1440');
3
4 end;
5 /ORA-06550: 第 1 行, 第 108 列:
PLS-00103: 出现符号 "END"在需要下列之一时:
:= . ( @ % ;
符号 ";" 被替换为 "END" 后继续。
ORA-06512: 在 "SYS.DBMS_JOB", line 79
ORA-06512: 在 "SYS.DBMS_JOB", line 136
ORA-06512: 在 line 3
nob
---------这是什么错误。我快疯了。
神啊,就我啊。
begin
sys.dbms_job.submit(job => :job,
what => ''PRCO_CWGL_DSTJ;',
next_date => to_date('01-08-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'to_date(to_char(sysdate + 1,''yyyymmdd'')||''010000'',''yyyymmddhh24miss'')');
commit;
end;
/
--上面多写了个引号,用这个
begin
sys.dbms_job.submit(job => :job,
what => 'PRCO_CWGL_DSTJ;',
next_date => to_date('01-08-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'to_date(to_char(sysdate + 1,''yyyymmdd'')||''010000'',''yyyymmddhh24miss'')');
commit;
end;
/
这句话的意思是什么?
是不是这样写才是?
PL/SQL procedure successfully completed
job
---------
81这里job 81是什么意思?
--我上面写的是每天的凌晨1点,你说的每年的8月1号的凌晨1点应该是这样:
begin
sys.dbms_job.submit(job => :job,
what => 'PRCO_CWGL_DSTJ;',
next_date => to_date('01-08-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'to_date(to_char(add_months(sysdate,12),''yyyymmdd'')||''010000'',''yyyymmddhh24miss'')');
commit;
end;
/
这句话的意思是什么?这就是设置下次执行时间是明年的8月1号凌晨1点
在过程执行完毕后
PL/SQL procedure successfully completed
job
---------
81这里job 81是什么意思? 81是job的存在数据库中的编号
或者设置dbms_job.submit中的broken参数为true
执行多个存储过程的话,
what => 'PRCO_CWGL_DSTJ;' 这里有几个过程就写几个,之间用分号隔开,记得最后也要分号的
JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
81 2011/9/30 1 01:00:00 0 N
SQL> dbms_job.remove(81);
这样是删除吗?为什么不行
ORA-00900: 无效 SQL 语句
在what => '过程1;过程2;'
这里过程执行顺序,是过程1执行完了,再执行过程2吗?
还是两个同事进行?
我现在是想要 过程2在过程1执行完后,再执行,有什么办法没?
--删除JOB
SQL> select job,next_date,next_sec,failures,broken from user_jobs;
JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
41 2011-9-29 2 23:51:54 0 N
SQL> begin
2 dbms_job.remove(41);
3 end;
4 /
PL/SQL procedure successfully completed
SQL> commit;
Commit complete
SQL> select job,next_date,next_sec,failures,broken from user_jobs;
JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
SQL>--what => '过程1;过程2;' 这里的过程是串行的,不是并行的--next_date => to_date('01-08-2011 01:00:00', 'dd-mm-yyyy hh24:mi:ss')
这里就是执行时间为今年的8月1号 然后加上interval里的间隔 不就是以后每年的8月1号