一般在sqlplus或者其他第三方oracle工具中,按照语法及需求写好代码,直接执行创建过程即可。
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站设计、思礼网络推广、小程序制作、思礼网络营销、思礼企业策划、思礼品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供思礼建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
一般语法如下:
1
2
3
4
5
6
7
8
9
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;
把submit变成isubmit,其他都一样,这样如果301被占用,仍然是要报错的,但是如果没有被占用,那么就建立了一个301编号的job,如下:
Begin
sys.dbms_job.isubmit(job = 301,
what = 'RPT_Del_Revise;',
next_date = to_date('2010-06-01', 'YYYY-MM-DD'),
interval = 'TRUNC(LAST_DAY(SYSDATE)+1)');
Commit;
End;
begin
dbms_scheduler.create_job(job_name = 'scan_table',
job_type = 'STORED_PROCEDURE',
job_action = 'sp_scan_table', --自定义的扫描表存储过程
start_date = to_timestamp('20150827 00:00:00', 'yyyymmdd hh24:mi:ss'),
repeat_interval = 'freq=minutely;interval=10;byhour=17,18,19,20,21,22,23');
end;
/
begin
dbms_scheduler.enable(name = 'scan_table');
end;
/
--查看记录表 SELECT * FROM JOB_RECORD_10GTABLE ORDER BY RECORDDATE DESC; --回滚记录表 DROP TABLE JOB_RECORD_10GTABLE; --删除记录表中的数据 DELETE FROM JOB_RECORD_10GTABLE; --2.建存储过程 CREATE OR REPLACE PROCEDURE PRO_10GJOB_TESTISBEGININSERT INTO JOB_RECORD_10GTABLE VALUES(SYSDATE); END PRO_10GJOB_TEST;--3.建JOBBEGINSYS.DBMS_SCHEDULER.CREATE_JOB( JOB_NAME = 'JOB10GTEST',--生成job名称 JOB_TYPE = 'STORED_PROCEDURE',--job类型 JOB_ACTION = 'PRO_10GJOB_TEST',--job执行的程序 START_DATE = SYSDATE,--job开始执行时间 REPEAT_INTERVAL = 'FREQ=MINUTELY',--job执行频率 END_DATE = NULL,--job结束执行时间 JOB_CLASS = 'DBMS_JOB$', ENABLED = TRUE, AUTO_DROP = FALSE, COMMENTS = '10G JOB 测试');--job描述END;--4.启动JOBBEGINDBMS_SCHEDULER.ENABLE('JOB10GTEST');END;--5.停用JOBBEGINDBMS_SCHEDULER.STOP_JOB('JOB10GTEST');END;--5.删除JOBBEGINDBMS_SCHEDULER.DROP_JOB('JOB10GTEST'); 最后给出JOB执行频率的一些参数 以下给出部分repeat_interval的写法实例,以供参考 每天'FREQ=DAILY;INTERVAL=1' 第分钟 'FREQ=MINUTELY;INTERVAL=1' 每4小时 'FREQ=HOURLY;INTERVAL=4;BYMINUTE=0;BYSECOND=0' 每月第一天 'FREQ=DAILY;BYMONTHDAY=1' 工作日的上午7点和下午3点 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=7,15;BYMINUTE=0;BYSECOND=0'
将下面的存储过程名称换成实际的存储过程名称,就可以实现您要的功能的,
现为你写的,直接在pl/sql dev里面执行就行了,有啥问题再联系我。
上面一段是删除job,后面的是建立job,我写了判断语句,可以随意执行
参考oracle的 dbms_job包。
---------------------华丽丽的分割线----------------------------
DECLARE
i_count number;
job_num number;
BEGIN
select count(job) into i_count from user_jobs where upper(what)='存储过程名称;';
if i_count0 then
select job into job_num from user_jobs where upper(what)='存储过程名称;';
dbms_job.remove(job_num);
end if;
END;
/
commit;
DECLARE X NUMBER;
BEGIN
DBMS_JOB.SUBMIT
( job = X
,what = '存储过程名称;'
,next_date = to_date(to_char(sysdate+1,'yyyy-mm-dd')||' 01:00:00','yyyy-mm-dd hh24:mi:ss')
,interval = 'SYSDATE+1'
,no_parse = TRUE
);
END;
/
commit;
declare
jobid number;
begin
sys.dbms_job.submit(
jojobid,
'PROC_test();',
to_date('20130917 01:00','yyyymmdd HH24:mi'),
'sysdate+1');
end;
/
没测试。如果是我,我会把starttime和endtime写在PROC_test里,不传参。