热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Shell执行Oracle存储过程,获得存储过程返回值

同事做一个小的etl调度,需要将存储过程执行情况进行返回并控制其后续依赖是否执行,本人只是将调用执行存储过程的shell脚本中存

同事做一个小的etl调度,需要将存储过程执行情况进行返回并控制其后续依赖是否执行,本人只是将调用执行存储过程的shell脚本中存

同事做一个小的etl调度,需要将存储过程执行情况进行返回并控制其后续依赖是否执行,本人只是将调用执行存储过程的shell脚本中存储过程输出参数返回,并没有写具体的控制程给大家,如果在这个思路上继续进行开发,那就是一个小的etl调度程序,有需要可以联系我,360263676,共同研究共同进步,哈哈

下面将各个脚本进行说明:(ex_produre.sh)

1.执行存储过程脚本

#!/bin/bash
user_name=$1
user_pass=$2
produre_name=$3
statis_sign=$4
sql_str=`
sqlplus -S $user_name/$user_pass as sysdba < set linesize 800;
set long 2048576;
set serveroutput on;
var oi_return number;
call $user_name.$produre_name($statis_sign,:oi_return);
select :oi_return from dual;
exit
EOF`
echo "$sql_str"|sed -e '4,/^$/!d;/^$/d'|
while read run_return
do
echo $run_return
done
2.调执行存储过程的shell脚本(ex_proc.sh)

#!/bin/bash
sh ex_produre.sh etl jiangtao pdm_cust_act_behav_base 201003 |grep -v OI_RETURN |grep -v -| while read vi_result
do
#this date
echo $vi_result
if [ $vi_result -eq 0 ]
then
echo "this produre is normal run "
else
echo "this produre is not normal run "
fi
done

3.相关存储过程及建表脚本(这个大家可以做为模板使用,,这可是一家大公司的模版,哈哈)

a.存储过程(pdm_cust_act_behav_base )

create or replace procedure pdm_cust_act_behav_base (is_month in varchar2, oi_return out number)
/** HEAD
* @name etl.pdm_cust_act_behav_base
* @caption ??????????
* @type ???
* @parameter is_month in varchar2 ???????YYYYMM
* @parameter oi_return out number ?????????0 ???-1 ??
* @description ??????????
* @target etl#tdm_cust_act_behav_base
* @source hwmk#tmm_ci_user_basic_m
* @middle
* @version 1.0
* @author
* @create-date
* @TODO ?
* @version
* @mender
* @modify_date
* @modify_desc
* @copyright
*/

-- ********************************************************************************
-- ????: etl.pdm_cust_act_behav_base
-- ????: ??????????
-- ????: is_month - ????
-- ????: oi_return - ?????????0 ???-1 ??
-- ????: hwmk.tmm_ci_user_basic_m
-- ????: etl.tdm_cust_act_behav_base
-- ????:
-- ????:
-- ????:
-- ????: v1.0
-- ????:
-- ????:
-- ????:
-- ????:
-- ????:
-- ********************************************************************************

is

vs_task_name varchar2(30); -- ????
vs_table_name varchar2(30); -- ???
vs_message varchar2(200); -- ????
vi_task_id integer; -- ??id
vi_month integer; -- ????
begin
vs_task_name := 'pdm_cust_act_behav_base';
vs_table_name := 'tdm_cust_act_behav_base';

-- ??????
etl.ps_log(vs_task_name, vs_table_name, is_month, 1, null, vi_task_id);

-- ??: ??????????
if (is_month is null) then
vs_message := '??????????';
etl.ps_log(null, null, null, 3, vs_message, vi_task_id);
oi_return := -1;
return;
end if;

------------------------------------------------------------
-- ??????
vi_month := to_number(is_month);

------------------------------------------------------------
insert into etl.tdm_cust_act_behav_base
(
statis_month,
serv_id
)
select
vi_month,
15204669284
from dual
;
commit;
------------------------------------------------------------
-- ??????
etl.ps_log(null, null, null, 2, null, vi_task_id);
-- ????
oi_return := 0;
return;

exception

when others then
-- ??????
vs_message := substr(sqlerrm, 1, 200);
-- ????
rollback;
-- ??????
etl.ps_log(null, null, null, 3, vs_message, vi_task_id);
-- ????
oi_return := -1;
return;

end;
/
b.存储过程(ps_log)

create or replace procedure ps_log
(
is_task_name in varchar2,
is_table_name in varchar2,
is_task_sign in varchar2,
ii_task_status in integer,
is_task_log in varchar2,
oi_task_id in out integer
)

-- ********************************************************************************
-- ????: etl.ps_log
-- ????: DW????????
-- ????: is_task_name - ????
-- is_table_name - ????
-- is_task_sign - ????, ???????????
-- ii_task_status - ????, 1 ?????, 2 ??????, 3 ??????
-- is_task_log - ????, ????[?????]?[??????],
-- ????[????]
-- oi_task_id - ??ID, ???2?3??????
-- ii_rowcount - ???
-- ????: oi_task_id - ??ID, ???1??????
-- ????:
-- ????: etl.ts_log
-- ????:
-- ????: ???
-- ????: 2010-02-01
-- ????: V1.0
-- ????:
-- ????:
-- ????:
-- ????:
-- ????: ????
-- ********************************************************************************

is

vs_err_msg varchar2(255); -- ??????

begin

if ii_task_status = 1 then

-- ????????????
select etl.seq_dw_log.nextval
into oi_task_id
from dual;

insert into etl.ts_log
(
task_id, -- ??ID
task_name, -- ????
table_name, -- ????
task_sign, -- ????
start_time, -- ??????
end_time, -- ?????????????
task_status, -- ????
task_log -- ????
)
values
(
oi_task_id,
is_task_name,
is_table_name,
is_task_sign,
sysdate,
null,
'1',
'?????'
);

elsif ii_task_status = 2 then

-- ????????????ID????????
update etl.ts_log
set end_time = sysdate,
task_status = '2',
task_log = '??????'
where task_id = oi_task_id;
else

-- ??????????ID?????????????
update etl.ts_log
set end_time = sysdate,
task_status = '3',
task_log = substr(is_task_log, 1, 200)
where task_id = oi_task_id;
end if;
commit;

-- ????
return;

exception

-- ????
when others then
-- ??????
vs_err_msg := substr(sqlerrm, 1, 200);
-- ????
rollback;
-- ??????
dbms_output.put_line('etl.ps_log: ' || vs_err_msg);
-- ????
return;

end;
/

c.建表脚本:

-- Create sequence
create sequence SEQ_DW_LOG
minvalue 1
maxvalue 999999999999999999999999999
start with 2731
increment by 1
cache 20;
create table TS_LOG
(
TASK_ID INTEGER,
TASK_NAME VARCHAR2(30),
TABLE_NAME VARCHAR2(30),
TASK_SIGN VARCHAR2(20),
START_TIME DATE,
END_TIME DATE,
TASK_STATUS VARCHAR2(1),
TASK_LOG VARCHAR2(200),
ROWCOUNT NUMBER
);
-- Create table
create table TDM_CUST_ACT_BEHAV_BASE
(
STATIS_MONTH NUMBER(10),
SERV_ID NUMBER(12)
);

linux

推荐阅读
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 本文介绍了一种使用SQL Server存储过程来实现基于单一条件的高效分页查询的方法。通过示例代码,详细说明了如何构建和执行这种分页查询。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 探讨了SQL Server 2000自带工具绘制的一对多关系表的效果及其导出功能,并推荐了几款专业的ER图绘制软件。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 本文详细介绍了PostgreSQL与MySQL在SQL语法上的主要区别,包括如何使用COALESCE替代IFNULL、金额格式化的方法、别名处理以及日期处理等关键点。 ... [详细]
  • 本文详细介绍了在 Ubuntu 16.04 系统上安装和配置 PostgreSQL 数据库的方法,包括如何设置监听地址、启用密码加密、更改默认用户密码以及调整客户端访问控制。 ... [详细]
  • 本文作为《WM平台上使用Sybase Anywhere 11》系列的第二篇,将继续探讨在Windows Mobile (WM) 系统中如何高效地操作Sybase Anywhere 11数据库。继上一篇关于安装与基本测试的文章之后,本篇将深入讲解数据库的具体操作方法。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
author-avatar
x洗不掉的思念
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有