昨日刚了解的Oracle中job是怎么回事,做个简单的笔记,有什么不正确的地方还请各位大拿指教;当我们需要定时在后台执行相关操作:如每天晚上0点将一张表的数据保存到另一张表中或者定时备份数据库等就需要用到job;先将使用步骤简单记录:
1).建个测试用表和sequence
-- Create table
create table Z_TEST(
id NUMBER(12),
c_date DATE);
-- Create sequence
create sequence SEQ_Z_TEST
minvalue 1
maxvalue 1000
start with 235
increment by 1
nocache; 2).创建测试所用的存储过程
CREATE OR REPLACE PROCEDURE PRO_Z_TEST IS
BEGIN
INSERT INTO Z_TEST (SEQ_Z_TEST.NEXTVAL, SYSDATE);
END REP_Z_TEST;
3).创建job
/**
job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。
*/
PROCEDURE SUBMIT(JOB OUT BINARY,
WHAT IN VARCHAR2,
NEXT_DATE IN DATE,
INTERVAL IN VARCHAR2,
NO_PARSE IN BOOLEAN := FALSE);
测试:
-- CREATED ON 2013-01-07 BY ADMINISTRATOR
DECLARE
-- LOCAL VARIABLES HERE
JOB NUMBER;
BEGIN
-- TEST STATEMENTS HERE
SYS.DBMS_JOB.SUBMIT(JOB,'REP_Z_TEST;',SYSDATE,'SYSDATE+1/1440/60');--每5秒钟执行一次
END;
4).查看当前用户下的job视图
SELECT * FROM USER_JOBS;
5).立即运行当前JOB
BEGIN
DBMS_JOB.RUN(:JOB);--参数为当前JOB的值
END;
/
6).删除JOB
BEGIN
DBMS_JOB.REMOVE(:JOB);--参数为当前JOB的值
END;
/
【注】:关于job还有很多过程如:Broken()、change()、Interval()、Isubmit()、Next_Date()、Remove()、Run()、User_Export()、What()等,这些尽在dbms_job package中。