- 浏览: 337295 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
hufangxian:
估计面试官都被你的回答搞晕了。
抽象类和接口的理解 -
alvin198761:
需要了解多态和设计模式,了解一些框架的原理,你就知道这东东真正 ...
抽象类和接口的理解 -
sangei:
谢谢楼上提醒,希望慢慢能有所进步。
抽象类和接口的理解 -
jackra:
书背的不错可以看看设计模式如何使用抽象类
抽象类和接口的理解 -
ptsd:
lag(column_x,number1,XX)用来返回当前数 ...
【转】oracle的LAG和LEAD分析函数
在Oracle中可以使用JOB来实现一些任务的自动化执行,类似于UNIX操作系统crontab命令的功能。
简单演示一下,供参考。
1.创建表T,包含一个X字段,定义为日期类型,方便后面的定时任务测试。
sec@ora10g> create table t (x date);
Table created.
2.创建存储过程p_insert_into_t,每次执行该存储过程都会向T表中插入一条系统当前时间。
sec@ora10g> create or replace procedure p_insert_into_t
2 as
3 begin
4 insert into t
5 values (SYSDATE);
6 end;
7 /
Procedure created.
3.OK,准备就绪,我们来创建一个JOB,这个JOB会每分钟运行一次?需要注意一个细节!
sec@ora10g> variable job_number number;
sec@ora10g> begin
2 DBMS_JOB.submit (:job_number,
3 'P_INSERT_INTO_T;',
4 SYSDATE,
5 'sysdate+1/(24*60)');
6 end;
7 /
PL/SQL procedure successfully completed.
4.我们通过USER_JOBS视图查看一下创建的JOB信息。
sec@ora10g> select job,
2 log_user,
3 to_char(last_date,'yyyy-mm-dd hh24:mi:ss') last_date,
4 to_char(next_date,'yyyy-mm-dd hh24:mi:ss') next_date,
5 interval,
6 what
7 from user_jobs
8 /
JOB LOG_USER LAST_DATE NEXT_DATE INTERVAL WHAT
------- -------- ------------------- ------------------- ----------------- ----------------
27 SEC 2010-01-29 00:34:20 sysdate+1/(24*60) P_INSERT_INTO_T;
细节之处在此,此处的LAST_DATE内容是空,表示此JOB没有被执行过,因此这个JOB将永远不会被自动的执行。
这一点可以从T表没有数据来得到验证:
sec@ora10g> select * from t;
no rows selected
那么,如何才能使它自动执行起来呢?
很简单,只要我们手动将这个JOB执行一下即可。
5.手工执行JOB一次,使之按照既定的时间间隔执行。
sec@ora10g> execute dbms_job.run(27);
PL/SQL procedure successfully completed.
此时T表中将会被插入一条具有当前时间的数据。
sec@ora10g> select * from t;
X
-------------------
2010-01-29 00:37:42
再次查看JOB的信息
sec@ora10g> select job,
2 log_user,
3 to_char(last_date,'yyyy-mm-dd hh24:mi:ss') last_date,
4 to_char(next_date,'yyyy-mm-dd hh24:mi:ss') next_date,
5 interval,
6 what
7 from user_jobs
8 /
JOB LOG_USER LAST_DATE NEXT_DATE INTERVAL WHAT
------- -------- ------------------- ------------------- ----------------- ----------------
27 SEC 2010-01-29 00:37:42 2010-01-29 00:38:42 sysdate+1/(24*60) P_INSERT_INTO_T;
此时LAST_DATE显示了我们执行JOB的时间,同时NEXT_DATE显示了下次JOB将被执行的时间。此后这个JOB将会每隔一分钟被执行一次。
自动执行一段时间后的T表内容如下:
sec@ora10g> select * from t order by x;
X
-------------------
2010-01-29 00:37:42
2010-01-29 00:38:46
2010-01-29 00:39:46
2010-01-29 00:40:46
2010-01-29 00:41:46
2010-01-29 00:42:46
2010-01-29 00:43:46
2010-01-29 00:44:46
2010-01-29 00:45:46
2010-01-29 00:46:46
2010-01-29 00:47:46
2010-01-29 00:48:46
2010-01-29 00:49:46
2010-01-29 00:50:46
2010-01-29 00:51:46
2010-01-29 00:52:46
16 rows selected.
6.为什么刚刚创建后的JOB不能自动的执行呢?
这是一个疏忽导致的!
在创建JOB的时候,需要在结尾处指定“COMMIT;”!表示创建完成之后便执行一次。
删除之前的JOB,重新创建一个带有“COMMIT”语句的新JOB。
sec@ora10g> variable job_number number;
sec@ora10g> begin
2 DBMS_JOB.submit (:job_number,
3 'P_INSERT_INTO_T;',
4 SYSDATE,
5 'sysdate+1/(24*60)');
6 commit;
7 end;
8 /
sec@ora10g> print job_number;
JOB_NUMBER
----------
29
此次创建的JOB信息如下,可见LAST_DATE在创建完之后便有内容,表示已经被执行了一次。
sec@ora10g> select job,
2 log_user,
3 to_char(last_date,'yyyy-mm-dd hh24:mi:ss') last_date,
4 to_char(next_date,'yyyy-mm-dd hh24:mi:ss') next_date,
5 interval,
6 what
7 from user_jobs
8 /
JOB LOG_USER LAST_DATE NEXT_DATE INTERVAL WHAT
------- -------- ------------------- ------------------- ----------------- ----------------
29 SEC 2010-01-29 01:02:11 2010-01-29 01:03:11 sysdate+1/(24*60) P_INSERT_INTO_T;
一分钟过后便可看到T表中已有两条记录。
sec@ora10g> select * from t;
X
-------------------
2010-01-29 01:02:11
2010-01-29 01:03:11
7.删除JOB方法
很简单,使用“dbms_job.remove”即可。
sec@ora10g> execute dbms_job.remove(29);
PL/SQL procedure successfully completed.
8.最后,谈一下创建JOB时用到的参数。
1)使用desc命令查看DBMS_JOB,可以得到SUBMIT这个存储过程的参数列表。
sec@ora10g> desc DBMS_JOB
...
PROCEDURE SUBMIT
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
JOB BINARY_INTEGER OUT
WHAT VARCHAR2 IN
NEXT_DATE DATE IN DEFAULT
INTERVAL VARCHAR2 IN DEFAULT
NO_PARSE BOOLEAN IN DEFAULT
INSTANCE BINARY_INTEGER IN DEFAULT
FORCE BOOLEAN IN DEFAULT
...
2)如果希望对这些参数有更好的理解,可以参考Oracle的官方文档描述,细致而周到。
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_job.htm#sthref2936
3)重点关注一下官方文档中关于INTERVAL参数的示例
'sysdate + 7'表示一周执行一次;
'next_day(sysdate,''TUESDAY'')' 表示每周二执行一次;
'null'表示只执行一次。
本文中我使用的是'sysdate+1/(24*60)'表示每分钟执行一次。很形象,一天的二十四分之一是一小时,一小时的六十分之一就是一分钟的意思。
9.小结
通过这个文章和大家分享了一点关于JOB的创建方法和使用,希望对大家有帮助。
细节不容错过!
发表评论
-
SQL中on条件与where条件的区别
2016-02-17 10:26 737/* 标题:SQL中 -
mysql update注意
2016-01-18 16:16 607drop table a; CREATE TABLE IF ... -
oracle里的job和schedule有什么区别(转)
2012-10-15 16:31 1301910g 中新推出的SCHEDULER可能确实会让很多初接触的朋 ... -
procedure的加密
2012-08-06 14:34 779wrap iname=eptapi.pac oname=ept ... -
sql plus中执行pl/sql
2012-03-23 00:18 0declare v_string varc ... -
(转)oracle 带输出参数存储过程
2012-03-23 00:13 0执行带输出参数的存储过程 SQL> var c v ... -
(转)Oracle:Authid Current_User的使用
2012-03-22 23:53 0我们知道,用户拥有的role权限在存储过程是不可用的。遇 ... -
在pl/sql里select dba_jobs为什么不成功
2012-03-22 23:52 0PROCEDURE TEST1 ( PROCEDR ... -
(转)Oracle 中的exception——(Raise)
2012-03-22 23:30 15651.GOTO,主要用于跳转,但会打乱我们的程序逻辑,一般不使用 ... -
(转)批量绑定—BULK COLLECT
2012-03-22 23:26 2906在 PL/SQL 编码中,经常会从表中获取结果集,然后进行一些 ... -
(转)PL/SQL --> 动态SQL的常见错误
2012-03-22 18:31 1467--============================ ... -
Oracle SELECT with an array using an IN
2012-01-18 17:03 1338Oracle SELECT with an ... -
pl/sql 实现类似于split 的分割字符串的功能
2012-01-12 23:55 61601、先建立一个包,定义数组类型:CREATE OR REP ... -
c#向pl/sql传递数组参数
2012-01-12 23:48 39271.OracleParameterpout1=OracleDb ... -
execute immediate
2012-01-12 21:41 1246EXECUTE IMMEDIATE Statement ... -
【实验】【PROCEDURE】一个最简单的oracle存储过程"proc_helloworld"
2011-08-08 09:51 1251本文通过一个最简单的oracle存储过程"proc_ ... -
创建oracle job
2011-07-27 17:20 905oracle job简介 主要的使用情景 定时在后台执行 ...
相关推荐
### Oracle Job 创建脚本详解 ...综上所述,Oracle Job 是一个非常强大的工具,通过合理的配置和使用,可以在数据库管理中发挥重要作用。在实际应用中,还需要结合具体情况灵活运用,不断优化和完善Job的设置。
Oracle 创建 Job 实例是指在 Oracle 数据库中创建一个计划任务,用于在特定的时间点执行特定的操作。以下是创建 Job 实例的详细过程和相关知识点: 一、创建 Job 实例 要创建一个 Job 实例,需要使用 dbms_job....
本文将深入探讨Oracle中的JOB创建,以及如何编写和使用相应的脚本来设定定时任务。 首先,我们需要理解Oracle中的DBMS_JOB包,这是Oracle提供的一组过程,用于创建、修改和管理JOB。DBMS_JOB包包含以下主要过程: ...
从oracle库中导出自定义的job脚本。
例如,可能需要每分钟将一个表中的数据更新到另一个表中,这样的任务可以通过创建 Oracle 的 Job 来实现。 #### 一、准备工作 1. **创建目标表**:首先需要创建一个用于存储定时更新数据的目标表。 ```sql ...
Oracle DBMS_JOB是一个系统包,提供了创建、修改和删除Job的功能。这个包包含了一系列的子程序,如SUBMIT、B broken、ALTER、DELETE等,用于管理Jobs。 2. **变量声明**: 在提供的脚本中,首先声明了一个名为`...
在 Oracle 中,Job 是一个异步执行的任务,可以根据需要设置执行频率和执行时间。本文将详细介绍 Oracle 中创建 Job 的步骤和相关操作。 一、创建 Job 的准备工作 在创建 Job 之前,需要首先创建一个表来存储 Job ...
oracle Job创建、管理、监控,Job运行情况分析,如果创建、删除、停止、修改Job.
Oracle中的JOB是一个重要的后台机制,用于自动化执行定时任务。这些任务可以是数据库维护、数据清理、备份或者其他任何基于时间的数据库操作。Oracle数据库利用SNP(Scheduler)进程来管理和执行这些JOB。 SNP...
### ORACLE如何停止一个JOB:深入解析与实践 在Oracle数据库管理中,有时我们需要停止正在运行的JOB,这可能是由于各种原因,如发现错误、优化性能或调整资源分配。本文将详细阐述如何在Oracle中查询并停止正在运行...
"Oracle Job 创建、更改和删除" Oracle Job 是一种自动执行任务的机制,允许数据库管理员创建、...通过上面的介绍,我们可以 thấy,Oracle Job 提供了一个灵活的机制来自动执行任务,提高了数据库管理员的工作效率。
在Oracle中,创建一个Job主要涉及以下几个步骤: 1. **定义存储过程**:首先,我们需要编写一个存储过程来封装要定时执行的操作。例如,如果要每天创建一个新的表来记录更新的节目信息,我们可以创建一个名为`sp_...
Oracle Job 是 Oracle 数据库中的一个特性,用于在预定义的时间间隔自动执行数据库任务,例如运行存储过程、PL/SQL 块或者 SQL 查询。对于初学者来说,理解如何创建、运行和管理 Oracle Job 是十分重要的。 1. **...
Oracle Job是Oracle数据库中的一个强大特性,主要用于在特定时间或间隔执行数据库操作,例如数据备份、维护任务或者定期的数据处理。以下是对Oracle Job使用方法和技巧的详细说明: 一、创建Oracle Job Oracle Job...
在这个例子中,我们创建了一个名为`MYJOB`的Job,它将执行名为`MYPRO`的Program,并按照名为`MYSCH`的Schedule执行。 ##### 5. 查看Job的运行情况 为了查看Job是否正常运行,可以执行以下查询: ```sql SELECT ...
每个 Job 都有一个唯一的标识符 `JOB`,以及其他一些字段,如: * `LOG_USER`: 提交任务的用户。 * `PRIV_USER`: 赋予任务权限的用户。 * `SCHEMA_USER`: 对任务作语法分析的用户模式。 * `LAST_DATE` 和 `LAST_SEC...
Oracle 中的 Job 是一个非常强大且灵活的功能,它允许开发者在数据库中执行计划任务,提高数据库的自动化程度和效率。那么,什么是 Oracle 中的 Job 呢? Oracle 中的 Job 是一个计划任务,它可以在指定的时间点或...
详细描述了在oracle中创建方案的3种方法,包括利用图形界面和sql语句
1. **创建Job**:使用DBMS_SCHEDULER或DBMS_JOB包中的函数创建一个新的作业。例如,可以使用DBMS_SCHEDULER.CREATE_JOB来定义作业的名称、执行的PL/SQL代码、执行频率和开始时间。 ```sql BEGIN DBMS_SCHEDULER....