掌握了 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. 一点BPXA的思考

    懂的人自然懂... BPXA功能配置 这个概念现在还有印象,记录下来: 一,BPXA是用于BP使用第三方资源的.如使用ORACLE数据库,就是在XA里配置.它的特征是以<xa>开头 二,B ...

  2. MongoDB主从配置

    master的配置 # cat mongod.conf dbpath = /app/sinova/mongodata/db            #指定数据库目录 logpath = /app/sin ...

  3. 【数论】【扩展欧几里得】Codeforces 710D Two Arithmetic Progressions

    题目链接: http://codeforces.com/problemset/problem/710/D 题目大意: 两个等差数列a1x+b1和a2x+b2,求L到R区间内重叠的点有几个. 0 < ...

  4. 动态规划——树形dp

    动态规划作为一种求解最优方案的思想,和递归.二分.贪心等基础的思想一样,其实都融入到了很多数论.图论.数据结构等具体的算法当中,那么这篇文章,我们就讨论将图论中的树结构和动态规划的结合——树形dp. ...

  5. SRM 600(1-250pt,500pt)

    DIV1 250pt 题意:给定一个vector<int>A,若能从里面选出一些数,使得他们按位或的值为x,则称x为吉利数.给定k,问最少要从A里面去掉多少个数,才能使k变为不吉利数. 解 ...

  6. Web —— tomcat 问题解决

    1.在Eclipse 上部署到Tomcat,使用mybatis 访问数据库,junit测试访问正常,Tomcat运行时报错: java.lang.NoClassDefFoundError: org/a ...

  7. 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)

    群里看到这道题,用python做了做, def find(array): v_sum = greatest = 0 for a in array: v_sum += a v_sum = 0 if v_ ...

  8. Fiddler 抓包 教程

    Fiddler的基本介绍 Fiddler的官方网站:  www.fiddler2.com Fiddler官方网站提供了大量的帮助文档和视频教程, 这是学习Fiddler的最好资料. Fiddler是最 ...

  9. 利用Asp.net MVC处理文件的上传下载

    如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个, ...

  10. Linq to sql并发与事务

    本文转载:http://www.cnblogs.com/lovecherry/archive/2007/08/20/862365.html 检测并发 首先使用下面的SQL语句查询数据库的产品表: se ...