oracle利用job实现存储过程异步执行
1.背景
在实际开发中,我们可能会利用存储过程批量处理业务,
对应有些存储过程可能会执行很长时间,这时我们需要客户端点操作后,存储过程异步执行
具体实现如下
1.创建处理业务的存储过程:sp_test_handle
2.创建触发业务的job:TEST_HANDLE_JOBS
3.创建客户端调用的存储过程:sp_test_handle_run
4.客户端调用存储过程sp_test_handle_run即可实现对sp_test_handle的异步调用;
2.实现步骤
1.创建处理业务的存储过程:sp_test_handle
create or replace procedure sp_test_handle(v_task_id number --任务编号
) as
-----------------------------------------------------------------------
-- 功能: 存储过程异步处理测试
-- 创建: lidongping 2020-9-30
----------------------------------------------------------------------- begin -- 参数检查
if (v_task_id is null) then
dbms_output.put_line('v_task_id 为空');
return;
end if; -- 处理业务
dbms_output.put_line('处理复杂的业务:' || v_task_id); exception
when others then
rollback;
dbms_output.put_line('处理异常:' || v_task_id);
end;
2.创建触发业务的job:TEST_HANDLE_JOBS

3.创建客户端调用的存储过程:sp_test_handle_run
create or replace procedure sp_test_handle_run(v_task_id number, -- 批次号
v_out_code out number, -- 错误码
v_out_msg out varchar2) -- 错误消息
as
-----------------------------------------------------------------------
-- 功能: 执行任务
-----------------------------------------------------------------------
l_job_name varchar2(128) := 'TEST_HANDLE_JOBS'; begin -- 设置存储过程参数
dbms_scheduler.set_job_argument_value(job_name => l_job_name,
argument_position => 1,
argument_value => v_task_id); -- 启动job
dbms_scheduler.enable(l_job_name);
v_out_code := error_code.success;
v_out_msg := '操作成功'; exception
when others then
rollback;
v_out_code := error_code.failed;
v_out_msg := '过程异常:' || sqlerrm;
end;
4.客户端调用存储过程sp_test_handle_run即可实现对sp_test_handle的异步调用;
完美!
oracle利用job实现存储过程异步执行的更多相关文章
- Oracle 在函数或存储过程中执行sql查询字符串并将结果值赋值给变量
请看黄色部分 --区县指标 THEN TVALUE_SQL := 'SELECT TO_CHAR(' || CUR_ROW.MAIN_FIELD || ') FROM ' || CUR_ROW.END ...
- oracle 之 cursor:创建存储过程批量执行DDL语句
说明:使用此过程可任意执行批量DDL语句,调用DDL查询语句时,注意转义字符,使用 ' 转义! 需求:批量删除以CUR_TEST开头的表,且有日志记录. 环境准备:建几张以CUR_TEST开头测试表. ...
- Oracle 在函数或存储过程中执行一条插入语句并返回主键ID值
有时,我们需要往一张表插入一条记录,同时返回主键ID值. 假定主键ID的值都是通过对应表的SEQUENCE来获得,然后进行ID赋值 这里有几种情况需要注意: 1)如果建表语句含有主键ID的触发器,通过 ...
- Oracle 10g实现存储过程异步调用
DBMS_JOB是什么?DBMS_JOB是Oracle数据库提供的专家程序包的一个.主要用来在后台运行程序,是数据库中一个极好的工具. 可用于自动调整调度例程任务,例如分析数据表,执行一些归档操作,清 ...
- 在存储过程中执行3种oracle循环语句
create or replace procedure pr_zhaozhenlong_loop /* 名称:在存储过程中执行3种循环语句 功能:利用循环给表中插入数据 调用: begin -- Ca ...
- Oracle创建存储过程、执行存储过程基本语法
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?
Oracle中如何导出存储过程.函数.包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程? 麦苗答:方法有多种,可以使用DBMS_MET ...
- oracle中带参存储过程的使用
Oracle中存储过程带参分为:输入参数(in)和输出参数(out) 例如: create or replace procedure out_test(v_user in emp.user_name% ...
- [.NET] 利用 async & await 的异步编程
利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html 目录 异步编程的简介 异 ...
- [.NET] 利用 async & await 进行异步 IO 操作
利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html 序 上次,博主 ...
随机推荐
- JVM垃圾回收器(详解)
引言 垃圾回收(GC,Garbage Collection) 在笔者上一篇文章中(JVM内存模型),介绍了JVM内存模型以及JVM运行时的数据区,堆是JVM内存区域里面最大的一块区域,用于存放实例数据 ...
- 微信和支付宝异步回调通知IP白名单
附一:微信支付回调通知出口IP列表 商户侧对商户回调通知功能开通白名单网段: 上海电信出口网段:101.226.103.0/25 上海联通出口网段:140.207.54.0/25 上海CAP出口网段: ...
- apollo配置json
#json串原文[{"username":"李小刚","sex":"男"},{"username": ...
- kettle从入门到精通 第七十课 ETL之kettle kettle数据校验,脏数据清洗轻松拿捏
场景:输入在指定的错误(错误应涵盖数据类型不匹配的情况)行数内,trans不报错,但通过错误处理步骤捕捉,并记入文件,整个数据管线正常完成直至处理完最后一个输入行. 解决方案:使用步骤[数据检验]进行 ...
- Service Mesh技术详解
深入探讨Service Mesh的基本概念和核心技术,涵盖了服务发现.负载均衡.断路器与熔断机制,以及数据平面与控制平面的详细工作原理和实现方法. 关注作者,复旦博士,分享云服务领域全维度开发技术.拥 ...
- python Django项目以Debug模式启动和外网访问启动
一.Django介绍 介绍: 完善的web框架,包括前端和后端的管理,django项目管理: 管理后台访问:后面补充 前端页面访问:根据app/settings.py文件下配置的访问地址 1.1 项目 ...
- 安装tesserocr
1.下载安装包 这个包不能使用pip安装 可以在这里找到适合自己的版本安装: https://github.com/simonflueckiger/tesserocr-windows_build/re ...
- socket 地址复用 SO_REUSEADDR
背景 默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口(例如888),这时候,别的套接字就无法使用这个端口( 888 ) ref : https://blog.csdn.net/tenn ...
- HTML5、CSS3 里面都新增了那些新特性?
HTML5 新的语义标签 article 独立的内容. aside 侧边栏. header 头部. nav 导航. section 文档中的节. footer 页脚. 画布(Canvas) API 地 ...
- P1006
前面事情太多了,所以搁了很多的题没做 第一个不容易想的点就是这两条路是不会重叠的,所以可以转化成两条都从原点出发不相交的路径 第二点就是该如何去表示这两种路径,第一种是用四维数组存位置(这里非法解的递 ...