创建 序列 存储过程 job
掌握了 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的更多相关文章
- 使用Navicat 创建mysql存储过程,实现日期加流水号序列
目的:使用Navicat 创建mysql存储过程,实现格式为8位日期(年月日)+5位流水号序列. 步骤: 1.打开Navicat 登录数据库,点击导航栏上的函数,如下图: 2.点击新建函数,选择“过程 ...
- ORACLE通过JOB定时创建序列
http://blog.csdn.net/cuihaiyang/article/details/7872982 因为业务需要每月需要增加一个序列,想到了使用job定时创建,每次创建一年的.写此job的 ...
- SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...
- Oracle(创建序列)
概念: 所谓序列,在oracle中就是一个对象,这个对象用来提供一个有序的数据列,这个有序的数据列的值都不重复. 1.序列可以自动生成唯一值 2.是一个可以被共享的对象 3.典型的用来生成主键值的一个 ...
- Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER
关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...
- 创建MySQL存储过程示例
创建MySQL存储过程是学习MySQL数据库必须要掌握的知识,下文对创建MySQL存储过程作了详细的介绍,供您参考学习. AD:2013大数据全球技术峰会课程PPT下载 下文将教您如何创建MySQL存 ...
- DB2创建序列
一.创建序列 序列是按照一定的规则生产的数值,序列的作用非常的大,比如银行交易中的流水号,就是记录每笔交易的关键字段. 通过create sequence语句创建序列,具体语法如下: >> ...
- MySql创建一个存储过程
MySQL 存储过程是从 MySQL 5.0 新功能.存储过程的长处有一箩筐.只是最基本的还是运行效率和SQL 代码封装. 特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库时(比如 ...
- python推导式创建序列
推导式创建序列 推导式是一个或多个迭代器快速创建序列的一种方式.可以将循环和条件判断结合,简化代码.几个推导式注意符号的使用,比如小括号,方括号,大括号等等. 列表推导式 列表推导式生成列表对象,语法 ...
随机推荐
- Children of the Candy Corn
poj3083:http://poj.org/problem?id=3083 题意:给你一个迷宫,然后给你一个起点和终点,现在给你种规则,一种是先向左,无法向左则向前,无法向前则向右,否则则向后,另外 ...
- C# Linq-Aggregate
The easiest to understand definition of Aggregate is that it performs an operation on each element o ...
- 【HDOJ】2451 Simple Addition Expression
递推,但是要注意细节.题目的意思,就是求s(x) = i+(i+1)+(i+2),i<n.该表达中计算过程中CA恒为0(包括中间值)的情况.根据所求可推得.1-10: 31-100: 3*41- ...
- AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
RandomizedQueue 有几个关键点: 1. 选择合适的数据结构,因为需要任意位置删除元素,Linked list 做不到,必须使用resizing arrays. 2. resizing 的 ...
- AndroidStudio SVN检出
版本管理是每个项目的必经之路,很多的ADT都会集成版本管理插件.AS也同样可以集成GITHUB和SVN插件.github对项目有一定的限制,而SVN就比较开放了,所以我们在用AS开发的时候一般用SVN ...
- 网络流(最大流):POJ 1149 PIGS
PIGS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. 64-bit integer(整数) ...
- android.process.acore和system进程
从源码看来,android.process.acore进程应该是一些基本功能的载入程序. android-4.3_r2.2中,它包括以下项目: 1.UserDictionaryProvider < ...
- poj 1149 最大流
题目链接:http://poj.org/problem?id=1149 #include <cstdio> #include <cmath> #include <algo ...
- windows下python安装paramiko
Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypto模块,因此要在Python中使用SSH,则需要先安装模块顺序是 ...
- 总结的一些封装好的javascript函数
平时总结的一些常用javascript函数封装: //获取样式 function getStyle(obj,name){ if(obj.currentStyle){ return obj.curren ...