创建ORACLE JOB


oracle job简介
主要的使用情景
定时在后台执行相关操作:如每天晚上0点将一张表的数据保存到另一张表中,2:定时备份数据库等

熟化说万事开头难,这里我只简单记述一个创建一个简单的job
步骤如下:
1、创建一张表g_test
create table G_TEST
(
ID     NUMBER(12),
C_DATE DATE
)
2、创建一个sequence
create sequence G_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 141
increment by 1
cache 20;

3、创建一个存储过程
create or replace procedure prc_g_test is
begin
insert into g_test values(g_seq.nextval,sysdate);
end prc_g_test;

4、创建job,
使用Submit()过程,工作被正常地计划好。
这个过程有五个参数:job、what、next_date、interval与no_parse。

PROCEDURE Submit ( job       OUT binary_ineger,
What      IN  varchar2,
next_date IN  date,
interval  IN  varchar2,
no_parse  IN  booean:=FALSE)

job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。

在command window窗口中执行下面脚本
variable job1 number;
begin
sys.dbms_job.submit(job => :job,
what => 'prc_g_test;',
next_date => to_date('22-10-2008 10:06:41', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次
commit;
end;
/

----------------------------------------------------------------------------------
在plSQL中我的做法是:

declare  
job number;     
begin
sys.dbms_job.submit(job,'prc_g_test;',sysdate,'sysdate+1/1440');
end;
----------------------------------------------------------------------------------

5、查看创建的job
查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息。
如:
select * from dba_jobs

6、 运行JOB
说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数:
SQL> begin
2  dbms_job.run(:job);
3  end;
4  /

----------------------------------------------------------------------------------
在plSQL中我的做法是:
begin
dbms_job.run(3017);
end;
----------------------------------------------------------------------------------

7、 删除JOB
SQL> begin
2  dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198
3  end;
4  /

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个创建Oracle JOB的例子,该JOB每天早上6点运行一个PL/SQL过程,向一个目标表插入一些数据: 1. 首先,创建一个目标表,用于存储数据: ```sql CREATE TABLE my_table ( id NUMBER, name VARCHAR2(50) ); ``` 2. 创建一个PL/SQL过程,用于向目标表插入数据: ```sql CREATE OR REPLACE PROCEDURE insert_data IS BEGIN INSERT INTO my_table (id, name) VALUES (1, 'John'); INSERT INTO my_table (id, name) VALUES (2, 'Jane'); INSERT INTO my_table (id, name) VALUES (3, 'Bob'); END; ``` 3. 创建一个JOB,使用DBMS_SCHEDULER包中的CREATE_JOB过程。在CREATE_JOB过程中,指定JOB的名称,JOB的类型、PL/SQL过程的名称和调度计划。例如: ```sql BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'insert_data_job', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN insert_data; END;', start_date => TRUNC(SYSDATE) + 6/24, --每天早上6点开始运行 repeat_interval => 'FREQ=DAILY;BYHOUR=6;BYMINUTE=0;BYSECOND=0;', end_date => NULL, enabled => TRUE, comments => 'Job to insert some data into my_table every day at 6:00 AM' ); END; ``` 在这个例子中,JOB的名称是insert_data_jobJOB的类型是PL/SQL_BLOCK,PL/SQL过程的名称是insert_data,调度计划是每天早上6点运行。请注意,start_date被设置为今天的6点钟,因为我们想在今天6点钟运行该JOB。repeat_interval指定了这个JOB每天运行一次,并且在6点整开始运行。如果需要修改调度计划或禁用JOB,可以使用DBMS_SCHEDULER包中的相关过程来实现。 4. 检查JOB是否已成功创建。可以使用以下查询来检查JOB的状态: ```sql SELECT job_name, enabled, state FROM user_scheduler_jobs; ``` 如果JOB已成功创建,它的状态应该是SCHEDULED。 这样就可以定时向Oracle目标表插入数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值