zoukankan      html  css  js  c++  java
  • oracle存储过程与job

    首先存储过程是干什么的?job是干什么的?

    存储过程:相当于一个复杂的sql,用来执行自定义的复杂的功能,创建了之后会存入一个表里,可以通过job来执行存储过程,实现我们需要的功能

    job:实际上就是数据库内置的定时任务,可以设置存储过程什么时间执行的这么一种功能,是数据库自带的,

    ==========================存储过程==========================存储过程可以通过以写复杂sql的形式来实现自定义的特殊功能,由自己书写定义,定义后存入内置的表里定义格式:

    create or replace procedure 名字(参数(可有可无))
    as   .....       
    begin    
     ...........
    end;     

    例子:

    1:创建一个无参数的名为test_job的存储过程,作用是像表里添加系统时间

    create or replace procedure test_job
    as
    begin
    insert into t_job values(sysdate);---向表里添加数据
    end;2:创建一个名为test_user的存储过程,具体设置图下,红字为解释

    create or replace procedure test_user(username1 in varchar2(25))  --参数为username1,in代表是输入参数,参数的数据类型和长度
    as vs_username VARCHAR2(4000); --as后面可以定义变量,定义的变量可以在下面自定义的sql中引用 ;
    begin   --自定义的sql功能开始
      select username into vs_username from t_user where username=username1;  --将表中查出的username字段的值付给自定义的变量vs_username,into是oracle的一个关键字
      DBMS_OUTPUT.PUT_LINE(vs_username);--将结果打印输出
    end;    --自定义的sql功能结束

    查看定义的存储过程:

    select * from user_objects where object_type='PROCEDURE';    -- 可以查看自定义的存储过程

    =============================job===================================

    job是oracle本身自带的一个功能,可以自定义job,指定什么时候执行存储过程,定义好之后会存入内置的表里,根据定义的时间来执行存储过程

    定义的格式:
    declare      
       job1 number;   --指定名字
    begin
       dbms_job.submit(job1, 'test_job;', sysdate, 'sysdate+5/1440');--制定名字,要执行的存储过程,时间格式,具体的时间设置,这里是每5分钟执行一次存储过程
    end;查看定义好的job:

    select * from dba_jobs;--所有的job,管理员用户下的查询
    select * from user_jobs;--个人用户下的查询
    select * from dba_jobs_running;--查询正在运行的job,这个有待确认

    这样定义好job之后,我们定义的存储过程就会根据定义的job定期执行。

    ====================小例子开始===============================

    create table t_job(a date);--创建表

    --创建存储过程
    create or replace procedure test_job
    as
    begin
    insert into t_job values(sysdate);---向表里添加数据
    end;

    --定义job
    declare      
       job1 number;
    begin
       dbms_job.submit(job1, 'test_job;', sysdate, 'sysdate+5/1440');--每5分钟执行一次,定义完后job就是运行的
    end;

    select * from t_job; ---可以每隔5分钟查看一次表里看看有没有增加数据

    ====================小例子结束===============================

    下面是对job的一些操作
    --=============停止job==============
    begin
    dbms_job.broken(25,false);--true == y =停止,false ==N =执行
    end;
    /
    --===============删除job=============
    begin
    dbms_job.remove(24);
    end;
    /
    --================更改job时间========

    begin
    dbms_job.Interval(25, 'sysdate+5/1440');--更改指定job的时间设置
    end;
    /

     这里只写了broken/remove/Interval三个方法

    更多方法和job表结构请看:http://www.cnblogs.com/xueershewang/p/7354936.html

     时间的设置请看:http://www.cnblogs.com/xueershewang/p/7355286.html

  • 相关阅读:
    如何提升Web前端性能?
    简述Linux开机启动流程
    教你玩转Linux系统目录结构
    FreeBSD虚拟机 VMware Tools 安装教程
    何为KVM克隆和快照
    Knockout 新版应用开发教程之Computed Observables
    Knockout 新版应用开发教程之Observable与computed
    前端MVC框架Backbone 1.1.0源码分析系列
    Knockout 新版应用开发教程之创建view models与监控属性
    看看国外的javascript题目,你能全部做对吗?
  • 原文地址:https://www.cnblogs.com/xueershewang/p/7355268.html
Copyright © 2011-2022 走看看