掌握了 oracle中的 dbms_lock 函数,该函数 主要用于暂停执行的程序

1.用意

写job 以10分钟 为单元,前10分钟 从 1到10 插入测试表, 中间10分钟从 11到20插入测试表, 最后10分钟 从 21到30插入测试表.

2.处理方法

2.1 创建序列.  初始值 1  增量 1 最大值无限制

2.2 创建存储过程, 利用for循环顺序读取序列的nextval 插入 测试表.for循环中需要添加 sleep参数

2.3 创建job. 定期调用 存储过程, 参数repeat_interval    => 'FREQ=daily;INTERVAL=1',

/* every  day*/

2.4 创建测试表

3.创建测试表

SYS @ prod > CREATE TABLE TEST01(N1 DATE,N2 NUMBER);

Table created.

4.创建序列

--创建序列.  初始值 1  增量 1 最大值无限制

SYS @ prod >CREATE SEQUENCE MY_SEQ01 START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;

Sequence created.

5.创建存储过程

--创建存储过程, 利用for循环顺序读取序列的nextval 插入 测试表.for循环中需要添加 sleep参数

SYS @ prod > CREATE OR REPLACE PROCEDURE BATCH_INSERT01

AS

BEGIN

FOR I IN 1..90 LOOP

INSERT INTO TEST01 VALUES(SYSDATE,MY_SEQ01.NEXTVAL);

COMMIT;

DBMS_LOCK.SLEEP(60);

END LOOP;

END;

/

Procedure created.

6.测试存储过程

SYS @ prod >exec BATCH_INSERT01;

PL/SQL procedure successfully completed.

7.创建 job

方法一:

SYS @ prod > DECLARE

BEGIN

DBMS_SCHEDULER.CREATE_JOB(

JOB_NAME =>'JOB_BATCH_INSERT01',

JOB_TYPE =>'STORED_PROCEDURE',

JOB_ACTION =>'BATCH_INSERT01',

START_DATE =>SYSDATE,

REPEAT_INTERVAL    => 'FREQ=MINUTELY;INTERVAL=1',        /* EVERY  MINUTE*/

ENABLED=> TRUE,

AUTO_DROP=> FALSE,

--  END_DATE           =>  ' 25-AUG-15 2.00.00 PM ',

COMMENTS           =>  'MY NEW JOB');

END;

/

PL/SQL procedure successfully completed.

8.强制命令程序暂停

--暂停10秒调用  DBMS_LOCK函数强制使程序暂停

BEGIN

DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'));

DBMS_LOCK.sleep(10);

DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'));

END;

2015-09-08 11:16:17

2015-09-08 11:16:27

9.运行job(不需要运行操作,因为job到指定时间会自动运行哦)

SYS @ prod >exec DBMS_SCHEDULER.RUN_JOB(JOB_NAME=>' job_batch_insert01');

PL/SQL procedure successfully completed.

10.查看对应包

包中分别包含了 运行job、删除job等存储过程

SYS @ prod >desc DBMS_SCHEDULER;

PROCEDURE RUN_JOB

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

JOB_NAME                       VARCHAR2                IN

USE_CURRENT_SESSION            BOOLEAN                 IN     DEFAULT

PROCEDURE DROP_JOB

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

JOB_NAME                       VARCHAR2                IN

FORCE                          BOOLEAN                 IN     DEFAULT

11.删除job

首先停止job

SQL> EXEC DBMS_SCHEDULER.STOP_JOB(JOB_NAME=>'JOB_BATCH_INSERT01');

PL/SQL procedure successfully completed.

再删除job

SYS @ prod > EXEC DBMS_SCHEDULER.DROP_JOB(job_name=>'job_batch_insert01');

PL/SQL procedure successfully completed.

12.检查结果

检查 测试表中的数据在增加

SQL> SELECT * FROM TEST01;

但是 查询 dba_jobs、user_jobs、all_jobs 没有任何信息

SQL> select * from dba_jobs;

SQL> select * from user_jobs;

no rows selected

SQL> select * from dba_jobs_running;

no rows selected

只在all_scheduler_job_log 中看到该job 运行的相关信息

SQL> set linesize 1000

SQL> set pagesize 1000

SQL> col log_date for a40

SQL> col job_name for a30

SQL> select log_date,job_name,status,destination  from all_scheduler_job_log order by log_date desc;

LOG_DATE                                 JOB_NAME                       STATUS               DESTINATION

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

09-9月 -15 09.25.30.060000 上午 +08:00      JOB_BATCH_INSERT01                 SUCCEEDED

13.删除 序列、job、存储过程

SYS @ PROD >DROP PROCEDURE BATCH_INSERT01;

PROCEDURE DROPPED.

SYS @ PROD >DROP SEQUENCE MY_SEQ01;

SEQUENCE DROPPED.

SYS @ PROD >EXEC DBMS_SCHEDULER.DROP_JOB(JOB_NAME=>'JOB_BATCH_INSERT01');

PL/SQL PROCEDURE SUCCESSFULLY COMPLETED.

记录一下(以下为测试过程中用到的sql语句)

Plsql创建job

begin

sys.dbms_scheduler.create_job(job_name            => 'SJBDZFP.JOB_INSERT_TEST',

job_type            => 'STORED_PROCEDURE',

job_action          => 'sjbdzfp.insert_test',

start_date          => to_date('15-07-2015 10:00:00', 'dd-mm-yyyy hh24:mi:ss'),

repeat_interval     => 'Freq=Minutely;Interval=2',

end_date            => to_date('15-07-2015 12:00:00', 'dd-mm-yyyy hh24:mi:ss'),

job_class           => 'DBMS_JOB$',

enabled             => true,

auto_drop           => false,

comments            => 'My new job');

end;

/

副本1

create table test01 (n1 date,n2 number);

DROP TABLE TEST01 PURGE;

CREATE SEQUENCE MY_SEQ01 START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;

SELECT * FROM MY_SEQ01.NEXTVAL FROM DUAL;

DROP SEQUENCE MY_SEQ01;

CREATE OR REPLACE PROCEDURE BATCH_INSERT01

AS

BEGIN

FOR I IN 1..90 LOOP

INSERT INTO TEST01 VALUES(SYSDATE,MY_SEQ01.NEXTVAL);

COMMIT;

DBMS_LOCK.SLEEP(60);

END LOOP;

END BATCH_INSERT01 ;

DECLARE

BEGIN

DBMS_SCHEDULER.CREATE_JOB(

JOB_NAME =>'JOB_BATCH_INSERT01',

JOB_TYPE =>'STORED_PROCEDURE',

JOB_ACTION =>'BATCH_INSERT01',

START_DATE =>SYSDATE,

REPEAT_INTERVAL    => 'FREQ=MINUTELY;INTERVAL=1',        /* EVERY DAY */

ENABLED=> TRUE,

AUTO_DROP=> FALSE,

--  END_DATE           =>  ' 25-AUG-15 2.00.00 PM ',

COMMENTS           =>  'MY NEW JOB');

END;

begin

DBMS_SCHEDULER.RUN_JOB(JOB_NAME=>'job_batch_insert01',USE_CURRENT_SESSION =>true);

end;

BEGIN

DBMS_SCHEDULER.job_stopped('job_batch_insert01');

END;

副本2

SELECT * FROM TEST01 ORDER BY N2 ASC;

DELETE FROM TEST01 ;

BEGIN

DBMS_SCHEDULER.stop_job('job_batch_insert01');

END;

BEGIN

DBMS_SCHEDULER.job_disabled('job_batch_insert01');

END;

BEGIN

DBMS_SCHEDULER.drop_job('job_batch_insert01');

END;

创建 序列 存储过程 job的更多相关文章

  1. 使用Navicat 创建mysql存储过程,实现日期加流水号序列

    目的:使用Navicat 创建mysql存储过程,实现格式为8位日期(年月日)+5位流水号序列. 步骤: 1.打开Navicat 登录数据库,点击导航栏上的函数,如下图: 2.点击新建函数,选择“过程 ...

  2. ORACLE通过JOB定时创建序列

    http://blog.csdn.net/cuihaiyang/article/details/7872982 因为业务需要每月需要增加一个序列,想到了使用job定时创建,每次创建一年的.写此job的 ...

  3. SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...

  4. Oracle(创建序列)

    概念: 所谓序列,在oracle中就是一个对象,这个对象用来提供一个有序的数据列,这个有序的数据列的值都不重复. 1.序列可以自动生成唯一值 2.是一个可以被共享的对象 3.典型的用来生成主键值的一个 ...

  5. Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER

    关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...

  6. 创建MySQL存储过程示例

    创建MySQL存储过程是学习MySQL数据库必须要掌握的知识,下文对创建MySQL存储过程作了详细的介绍,供您参考学习. AD:2013大数据全球技术峰会课程PPT下载 下文将教您如何创建MySQL存 ...

  7. DB2创建序列

    一.创建序列 序列是按照一定的规则生产的数值,序列的作用非常的大,比如银行交易中的流水号,就是记录每笔交易的关键字段. 通过create sequence语句创建序列,具体语法如下: >> ...

  8. MySql创建一个存储过程

    MySQL 存储过程是从 MySQL 5.0 新功能.存储过程的长处有一箩筐.只是最基本的还是运行效率和SQL 代码封装. 特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库时(比如 ...

  9. python推导式创建序列

    推导式创建序列 推导式是一个或多个迭代器快速创建序列的一种方式.可以将循环和条件判断结合,简化代码.几个推导式注意符号的使用,比如小括号,方括号,大括号等等. 列表推导式 列表推导式生成列表对象,语法 ...

随机推荐

  1. Unity3d 合作开发项目

    Unity3d  合作开发项目    交流群:63438968  本人:灰太龙 项目的合作开发是至关重要的,第一个问题就是自适应分辨率的问题! 综合考虑了一下,我们采用了IGUI插件,这个插件有以下几 ...

  2. weblogic启动报错之建域时未指定AdminServer的监听IP的引起的子节点启动故障

    各子节点不能启动,查看日志,报错如下: Unable to establish JMX Connectivity with the Adminstration Server AdminServer a ...

  3. Android FileUtil(android文件工具类)

    android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...

  4. 线性代数(矩阵乘法):POJ 3233 Matrix Power Series

    Matrix Power Series   Description Given a n × n matrix A and a positive integer k, find the sum S = ...

  5. 【模拟】NEERC15 J Jump(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 系统里生成一个字符串C,一开始告诉你字符串的长度N(偶数).接着你需要在n+500次内猜出这个字符串是什么. ...

  6. Maximum Product Subarray——LeetCode

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  7. 类似与fiddler的抓包工具 burp suite free edition

    burp suite free edition

  8. 山东如意路嘉纳高级定制西装品牌惊艳亮相intertextile面料展 - 服装资讯中心 - 华衣网

    山东如意路嘉纳高级定制西装品牌惊艳亮相intertextile面料展 - 服装资讯中心 - 华衣网 山东如意路嘉纳高级定制西装品牌惊艳亮相intertextile面料展

  9. JavaScript中bind、call、apply函数用法详解

    在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.前几天有人问我关于代码里 call() 函数的用法,我让他去看书,这里推荐用js 写服务 ...

  10. 代码对齐 分类: C#小技巧 2014-04-17 14:45 166人阅读 评论(0) 收藏

    开发项目时,为了是代码层次清晰.美观,常常需要调整多行,使之对齐.在网上也看到一些方法,感觉不好用,偶尔发现一个小技巧. (1)多行代码同时右移 同时选中几行,按"Tab"键,就会 ...