DBMS_JOB是什么?
DBMS_JOB是Oracle数据库提供的专家程序包的一个.
主要用来在后台运行程序,是数据库中一个极好的工具. 可用于自动调整调度例程任务,例如分析数据表,执行一些归档操作,清理草稿表等等.
使用语法说明.
使用DBMS_JOB主例程是SUBMIT例程, 对SUBMIT例程中的各变量含义说明:
JOB: 一个作业标识符,由系统来分配(OUT参数).
WHAT: 将要运行的SQL文本,必须是有效的PL/SQL语句或一段代码. 例如: 运行存储过程P,可以传递字符串P;(包括分号)给这个例程。无论在WHAT参数中提交什么,将被封装成如下PL/SQL块:
Declare
Job Binary_Integer := :Job;
Next_Date Date := :Mydate;
Broken Boolean := False;
Begin
What
:Mydate := Next_Date;
If Broken Then :B := 1;
Else :B := 0;
End If;
End;
NEXT_DATE: 日期函数字符串,用来计算作业下次运行的时间.
NO_PARSE: 确定WHAT参数在提交时是否进行有效性分析。
INSTANCE: 只得在松耦合聚簇的机器上,在并行服务器模式(一个Oracle可以运行的模式)下才有意义,这将指定在哪个实例上作业可以执行.
FORCE: 只有在并行服务器模式下才有意义. 如设置为True(默认值),可以使用任何实例数据库提交作业, 如设置为False, 相关实例不可用,提交请求将失败.
在DBMS_JOB程序包中也有其它入口点. SUBMIT是用来调度作业的一个,其他的允许操作已调度的作业,执行操作,如RUN,REMOVE和CHANGE操作.
示例
设原有存储过程为:pr_movedetail(业务存储过程), 执行大数据量操作, 操作耗时.
利用DBMS_Job包功能, 将存储过程的执行集中提交给Oracle Job来处理, 客户端无需等待.
1. 创建一张表,包含每个参数的字段,再加一个ID主码字段.
Create Table run_movedetail
(
ID number primary key,
Param1 varchar2(255),
Param1 varchar2(255),
RunDate Date
)
此表不仅作为将要提交的处理过程排队的地方,而且当提交时,也可作为已提交处理过程保存永久日志的地方.
2. 创建fast_movedetail存储过程(创建作业ID及把各参数Insert到run_movedetail).
create or replace procedure fast_movedetail(p_Param1 varchar2,p_Param2 varchar2)
As
L_job number;
Begin
dbms_job.submit(L_job,’background_movedetail(JOB);’);
Insert into run_movedetail(ID,Param1,Parma2) values (L_job, p_Param1, p_Param2);
End;
该例程将提交一项作业background_movedetail,并且将它传递给JOB参数.
3. 创建background_movedetail存储过程.
Create or replace procedure background_movedetail(p_job in number)
As
L_rec run_movedetail%rowtype;
Begin
Select * into L_rec from run_movedetail where id = p_job;
Pr_movedetail(L_rec.Param1,L_rec.Param2); //业务存储过程调用
Update run_movedetail set RunDate = sysdate where id = p_job;
//调用实际使用的Pr_movedetail例程, 然后更新记录,记录实际提交时间.
End;
最后在客户端直接调用fast_movedetail即可.

作者“阶梯”

Oracle 10g实现存储过程异步调用的更多相关文章

  1. Oracle数据库连接、存储过程及调用

    Oracle数据库连接.存储过程及调用 1. 定义一个存储过程 create or replace procedure getuser(eid in number, na out varchar, e ...

  2. oracle如何创建存储过程和调用

    oracle存储过程的创建语法 create or replace procedure 存储过程名称 ( --定义输入.输出参数-- 参数名1 in 参数类型, 参数名2 in 参数类型, 参数名3 ...

  3. Oracle存储过程中异步调用的实际操作步骤

    本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用  .而有些相关的业务逻辑 ...

  4. J2EE之oracle、mysql存储过程调用

    最近几天在研究hibernate.JPA对存储过程的调用,主要是针对有返回结果集的存储过程的调用方法,个人感觉存储过程是个好东西,虽然说heibernate对数据访问封装的比较不错,再加上他的缓存机制 ...

  5. oracle存储过程递归调用

    oracle存储过程递归调用,如果where子句使用的是传入的参数, 在以后的递归调用中参数就是第一次调用的参数值,解决办法是定义变量,使用自定义的变量问题可以解决.

  6. oracle中存储过程中调用存储过程

    存储过程中调用存储过程 create or replace package body PF_Role_Pack is procedure sp_GetPage_Role(pageSize_ in nu ...

  7. (转载)oracle 在一个存储过程中调用另一个返回游标的存储过程

    原文链接:http://www.jb51.net/article/20160.htm 实际项目当中经常需要在一个存储过程中调用另一个存储过程返回的游标,本文列举了两种情况讲述具体的操作方法. 第一种情 ...

  8. oracle创建函数和调用存储过程和调用函数的例子(区别)

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  9. Oracle 10G强大的SQL优化工具:SQL Tuning Advisor

    p { margin-bottom: 0.25cm; direction: ltr; color: rgb(0, 0, 0); line-height: 120%; orphans: 2; widow ...

随机推荐

  1. win7下80端口被(Pid=4)占用的解决方法

    首先介绍一种网上普遍的方法,就是查找占据80端口的进程,然后关闭它就行了. 1.运行cmd,然后输入netstat -a -n -o,回车:2.查看开头几行包含0.0.0.0:80的那一行最后的pid ...

  2. python基础使用

    Python 标识符 在python里,标识符有字母.数字.下划线组成. 在python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. python中的标识符是区分大小写的. 以 ...

  3. 杭电1013-Digitai Root(另解)

    #include<stdio.h>#define maxsize 1000 int main(){    char N[maxsize+1];    int i,j,sum,n;    c ...

  4. hbase regionserver IO问题

    regionserver日志: java.io.IOException: Connection reset by peer         at sun.nio.ch.FileDispatcherIm ...

  5. 最简单的C/S程序——让服务器来做加法

    还在写“Hello world!”式的单机程序吗?还在各种拖控件吗?是否自己都觉得有点low呢?来个质的飞跃吧!看看怎么让服务器帮咱做加法! 所谓C/S程序就是Client/Server程序,自然既包 ...

  6. c#xml追加读取节点

    读取 if (File.Exists("Book.xml")) { XmlDocument doc = new XmlDocument(); doc.Load("Book ...

  7. oracle触发器自增字段

    1.创建序列 代码 -- Create sequence create sequence seq_userinfo minvalue 1 start with 1 increment by 1; 2. ...

  8. wamp安装完更改关联浏览器

    "wampmanager.conf"文件修改的是关于中到官网的链接打开方式. "wampmanager.ini"修改的是左键菜单的打开方式. 修改完无效的话重启 ...

  9. MUI 页面传值 webview

    我们假设a.html 和b.html a.html 页面代码 <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  10. linux 切换多个jdk脚本

    1,编写脚本 jdkswitch.sh #!/bin/sh # usage: . this_file [argvs] openjdk7_home=/usr/lib/jvm/java--openjdk- ...