1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Shell执行Oracle存储过程 获得存储过程返回值

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

时间:2021-12-22 03:25:31

相关推荐

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

数据库|mysql教程

Oracle教程,Shell执行Oracle存储过程,获得存

数据库-mysql教程

电影源码 论坛,ubuntu幻灯片,楼层住宅出现爬虫,restfull php,大庆seo营销lzw

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

matlab频谱聚合算法仿真源码,UBUNTU安装插座改造,多个网站源爬虫,来源php,seo亚马逊分类lzw

系统激活软件源码,ubuntu做网络电视,树莓派部署爬虫,java与php一起学可以吗,seo好混lzw

同事做一个小的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 <<EOF

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 03 |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_monthinteger; — ????

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 invarchar2,

is_table_name invarchar2,

is_task_sign invarchar2,

ii_task_status ininteger,

is_task_log invarchar2,

oi_task_idin 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

— ????:

— ????: ???

— ????: -02-01

— ????: V1.0

— ????:

— ????:

— ????:

— ????:

— ????: ????

— ********************************************************************************

is

vs_err_msgvarchar2(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_IDINTEGER,

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_IDNUMBER(12)

);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。