oracle的job,实际上就是数据库内置的定时任务,类似代码中的Timer功能。下面是使用过程:

这里我们模拟一个场景:定时调用存储过程P_TEST_JOB 向表TEST_JOB_LOG中插入数据

表结构:

 create table TEST_JOB_LOG
(
rec_id NUMBER not null,
occr_time DATE
);
alter table TEST_JOB_LOG
add constraint PK_TEST_JOB primary key (REC_ID);

序列:

 create sequence SEQ_TEST_JOB_LOG
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache 10;

存储过程:

 create or replace procedure P_TEST_JOB is
begin
insert into test_job_log(rec_id, occr_time) values(seq_test_job_log.nextval,sysdate);
commit;
end P_TEST_JOB;

上面只是准备工作,下面才是重点:(以下脚本全是pl/sql developer环境)

1、创建job

 declare
job_id number;
begin
sys.dbms_job.submit(job_id, 'P_TEST_JOB;', sysdate, 'sysdate+1/1440'); --马上运行,然后每分钟运行一次
sys.dbms_output.put_line(job_id); --输出job Id
end;

每个job创建后,都会对应一个唯一的数字,在pl/sql的output面板里,可以看到dbms_output.put_line输出的job id值。

2、查看job运行情况

 select * from dba_jobs; --需要dba权限
select * from dba_jobs_running; --需要dba权限
select * from all_jobs;
select * from user_jobs;

3、删除job

begin
dbms_job.remove(108); --108为具体的job ID,可以通过select * from user_jobs查询得到
end;

4、手动启动job

 begin
dbms_job.run(109);--运行指定Job
end;

最后,再给几个关于创建job的小例子:

a、带参数的存储过程调用

 declare
job_id number;
begin
sys.dbms_job.submit(job_id, 'P_JOB_XXX(sysdate-30,sysdate);', sysdate, 'trunc(sysdate+1)+(4*60)/(24*60)'); --每天早上4:00运行
sys.dbms_output.put_line(job_id); --输出job Id
end;

这里指定了P_JOB_CKG的传入参数为sysdate及sysdate-30,如果是字符串参数,需要加二个单引号,类似 'P_XXX(''参数值'');'

此外,单引号还可以用CHR(39)来代替,例如:

 DECLARE
JOB_ID NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT(JOB_ID,
'P_JOB_XXX(TO_DATE(' || chr(39) ||
'2014-2-12 00:00:00' || chr(39) || ', ' || chr(39) ||
'YYYY-MM-DD HH24:MI:SS' || chr(39) || '),TO_DATE(' ||
chr(39) || '2014-2-12 23:59:59' || chr(39) || ', ' ||
chr(39) || 'YYYY-MM-DD HH24:MI:SS' || chr(39) ||
'));',
TO_DATE('2015-1-6 10:00:00', 'YYYY-MM-DD HH24:MI:SS'),
'SYSDATE+10/(60*24)'); --2015-01-06 10:00:00 开始执行,每10分钟执行一次
SYS.DBMS_OUTPUT.PUT_LINE(JOB_ID); --输出JOB ID
END;

中间那一串恶心的拼接,无非是要得到字符串:

P_JOB_XXX(TO_DATE('2014-2-12 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),TO_DATE('2014-2-12 23:59:59', 'YYYY-MM-DD HH24:MI:SS'));

b、关于指定时间的表达式示例

每天运行一次
    'SYSDATE + 1'

每小时运行一次
    'SYSDATE + 1/24'

每10分钟运行一次                 
    'SYSDATE + 10/(60*24)'

每30秒运行一次                    
    'SYSDATE + 30/(60*24*60)'

每隔一星期运行一次               
    'SYSDATE + 7'

每个月最后一天运行一次          
    'TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,1))) + 23/24'

每年1月1号零时                    
    'TRUNC(LAST_DAY(TO_DATE(EXTRACT(YEAR FROM SYSDATE)||'12'||'01','YYYY-MM-DD'))+1)'

每天午夜12点                       
    'TRUNC(SYSDATE + 1)'

每天早上8点30分                  
    'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'

每星期二中午12点                 
    'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'

每个月第一天的午夜12点        
    'TRUNC(LAST_DAY(SYSDATE ) + 1)'

每个月最后一天的23点           
    'TRUNC (LAST_DAY (SYSDATE)) + 23 / 24'

每个季度最后一天的晚上11点  
    'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'

每星期六和日早上6点10分      
    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6*60+10)/(24*60)'

oracle: job使用的更多相关文章

  1. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  2. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  3. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  4. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  5. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  6. 基于Oracle安装Zabbix

    软件版本 Oracle Enterprise Linux 7.1 64bit Oracle Enterprise Edition 12.1.0.2 64bit Zabbix 3.2.1 准备工作 上传 ...

  7. Oracle Database 12c Data Redaction介绍

    什么是Data Redaction Data Redaction是Oracle Database 12c的高级安全选项之中的一个新功能,Oracle中国在介绍这个功能的时候,翻译为“数据编纂”,在EM ...

  8. 使用Oracle官方巡检工具ORAchk巡检数据库

    ORAchk概述 ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用.这个工具可以检查Oracle数据库,Gold ...

  9. 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断

    概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...

  10. 使用技术手段限制DBA的危险操作—Oracle Database Vault

    概述 众所周知,在业务高峰期,某些针对Oracle数据库的操作具有很高的风险,比如修改表结构.修改实例参数等等,如果没有充分评估和了解这些操作所带来的影响,这些操作很可能会导致故障,轻则导致应用错误, ...

随机推荐

  1. PHP implode() 函数 把数组元素组合为字符串

    http://www.w3school.com.cn/php/func_string_implode.asp PHP implode() 函数 PHP String 函数 实例 把数组元素组合为字符串 ...

  2. ORACLE数据库的限制

    ORACLE数据库最多可以拥有多少个表空间(Tablespace)?数据库最多拥有多少个数据文件(Database files).数据库的数据文件最大可以多大?遇到这些问题只能查询官方文档,人的记忆能 ...

  3. java 生成和解析二维码

    public class QRCode { /** * 解析二维码(QRCode) * @param imgPath * @return */ public static String decoder ...

  4. Python基础之装饰器

    1.什么是装饰器? Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然 ...

  5. android-The method findViewById(int) is undefined for the type ContactMainFragment报错

    @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view ...

  6. Uploadify v3.2.1 参数说明

    一.属性 属性名称 默认值 说明 auto true 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 . buttonClass ” 按钮样式 buttonCursor ‘ ...

  7. 浅析Java中的访问权限控制

    浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...

  8. [麦先生]Laravel框架实现发送短信验证

    今天在做到用户注册和个人中心的安全管理时,我借助实现第三方短信平台在Laravel框架中进行手机验证的设置;  由于我们做的是一个为客户提供医疗咨询和保健品网站,所以对客户个人隐私的保护显得尤为重要, ...

  9. 我要好offer之 二叉树大总结

    一. 二叉树定义 二叉树具有天然的递归特性,凡是二叉树相关题,首先应该联想到递归 struct BinTreeNode { BinTreeNode* left; BinTreeNode* right; ...

  10. Web学习之css

    CSS指层叠样式表(Cascading Style Sheets),CSS 是标准的布局语言,用来控制元素的尺寸.颜色.排版.CSS 由 W3C 发明,用来取代基于表格的布局.框架以及其他非标准的表现 ...