oracle存储过程通过JOB来实现并行执行_u012209894的专栏-CSDN博客

标签: | 发表时间:2021-02-01 10:07 | 作者:
出处:https://blog.csdn.net

1、oracle版本为10G及以上,由于网上很多都没有完善,所以特此完善记录下来,仅供参考

需求:多个无依赖关系的存储过程并行执行(使用该功能前测试下服务器情况,貌似并行任务和数据库的CPU个数有直接关系,小于等于CPU个数*4)。

实现思路:在存储过程中创建任务,以便能直接通过JAVA输入动态参数调用。

第一步:建测试表

      create table A ( A INTEGER);

第二步:创建存储过程

      create or replace procedure test1

(
    i_tjrq   in    number,    --统计日期
    i_err_no out number   --输出参数
)
as
begin
insert into a values(i_tjrq);
end;


create or replace procedure test2
(
    i_tjrq   in    number,     --统计日期
        i_err_no out number   --输出参数
)
as
begin
insert into a values(i_tjrq);
end;



第三步:在存储过程中创建任务,以便操作

      CREATE OR REPLACE PROCEDURE test3 (i_tjrq IN NUMBER)  as
x   NUMBER;
--m varchar2(100):='declare i_err_no NUMBER;begin test2('||i_tjrq||',i_err_no);test1('||i_tjrq||',i_err_no); end;';
BEGIN
   --SYS.DBMS_OUTPUT.put_line(m);
   sys.DBMS_JOB.submit (
      job         => x,
      what        => 'declare i_err_no NUMBER;begin test2('||i_tjrq||',i_err_no);test1('||i_tjrq||',i_err_no); end;',
      next_date   => TO_DATE ('14-05-2013 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
      interval    => 'trunc(sysdate+1)',
      no_parse    => FALSE);
   --SYS.DBMS_OUTPUT.put_line ('Job Number is: ' || TO_CHAR (x));
  
   COMMIT;
END;


--值得注意的是sys.DBMS_JOB.submit()里面的参数只在这里做简单的介绍

job是任务号--系统自行生成

what是可以存储pl/sql代码的函数,动态输入的变量可以在此拼接。

其他参数直接参考oracle官方文档或者自行搜索,就不一一叙述了。


select * from user_jobs 可以查看你用户名下任务的jobid 也就是上面的任务号,单个执行任务用下列语句实现。

begin
--dbms_job.remove(39); --删除任务
dbms_job.run(39);  --运行任务
end;

由于是直接创建在存储过程里面的,所以直接调用存储过程即可插入当天的数据。

begin
  -- Call the procedure
  test3(i_tjrq => :i_tjrq);
end;  --或者直接在pl/sql工具里面执行,查看a表你会发现系统数据已经插入。


相关 [oracle 存储过程 job] 推荐:

oracle存储过程通过JOB来实现并行执行_u012209894的专栏-CSDN博客

- -
1、oracle版本为10G及以上,由于网上很多都没有完善,所以特此完善记录下来,仅供参考. 需求:多个无依赖关系的存储过程并行执行(使用该功能前测试下服务器情况,貌似并行任务和数据库的CPU个数有直接关系,小于等于CPU个数*4). 实现思路:在存储过程中创建任务,以便能直接通过JAVA输入动态参数调用.

oracle 存储过程 基础

- - ITeye博客
差不多一年没写过存储过程,最近要写,发现基本忘了,google一番之后,觉得很有必要把基础的东西写下来备忘. decalre -- 变量声明 var1 number(2);. -- 仅声明 var2 char(2) := '11';. -- 在声明的同时初始化 begin. -- 语句 end; -- 语句块结束.

oracle中的存储过程使用

- - CSDN博客推荐文章
一存储过程的基本应用  . 1 创建存储过程(SQL窗口). 存储过程适合做更新操作,特别是大量数据的更新. 2 查看存储过程在数据字典中的信息(SQL窗口). 3 查看存储过程语句(SQL窗口). 4 执行存储过程(Command窗口). 使用SQL接口更新数据库,如果更新复杂而频繁,则需要频繁得连接数据库.

ORACLE 包内的存储过程的动态sql

- - CSDN博客数据库推荐文章
  function hello_function(p_param3 varchar2) --参数与包头中必须保持一致.         execute immediate 'insert into logtable1 values (:1,:2,:3,:4)' using '1','1','2','3'; --只能动态插入.

oracle 存储过程执行状态查询

- - Oracle - 数据库 - ITeye博客
从网上搜集了些资料,查看那些oracle procedure 正在执行,记录下以便日后使用:. 1、如何查看ORACLE中正在运行的存储过程. 使用 oracle 审核,记录和查看过程的执行. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

kettle执行job

- - 互联网 - ITeye博客
ETL高级教程kettle. 1,Kettle跨平台使用.     例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下:.     1)进入到Kettle部署的路径.     2)执行 chmod *.sh,将所有shell文件添加可执行权限.

mysql存储过程 游标

- - ITeye博客
end if; insert into table3 (name) select name from table2 where id =i; end loop cursor_loop; CLOSE c1; end $ delimiter ;. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.

如何正确设置job的interval?

- - ITeye博客
首先,先了解interval的定义. 即在job开始执行时根据date function估算job下次执行的时间(NEXT_DATE). 通常,我们采用两种方式来设置job的interval:. 由date function估算出的时间是固定的. 由date function估算出的时间是非固定的.

提高hadoop的mapreduce job效率

- - 数据库 - ITeye博客
hadoop 的mapreduce 的作业在运行过程中常常碰到一些这样的情 况:. 每一个map或者reduce只有30-40秒钟就结束. 超 大规模的job 时,通常会需要大量的map和reduce的slots 支持,但是job运行起来后,running的map和reduce并没有沾满集群的可用slots.

SQL 存储过程之游标

- - CSDN博客推荐文章
使用游标循环 SQL 查询结果: . --- 声明变量 DECLARE @bid nvarchar(30); DECLARE @address nvarchar(50); --- 定义游标 DECLARE cur CURSOR for. select bid,[Address] from building; --- 打开游标 OPEN cur.