shell执行oracle存储过程,获得存储过程返回值

From: http://www.flatws.cn/article/program/oracle/2011-06-27/32316.html


同事做一个小的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 <<EOFset 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
doecho $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 dateecho $vi_resultif [ $vi_result -eq 0 ]thenecho "this produre is normal run "elseecho "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
-- ????:
-- ????:
-- ????:
-- ????:
-- ????:
-- ********************************************************************************isvs_task_name            varchar2(30);       -- ????vs_table_name           varchar2(30);       -- ???vs_message              varchar2(200);      -- ????vi_task_id              integer;            -- ??idvi_month                integer;            -- ????
beginvs_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) thenvs_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)selectvi_month,15204669284from dual;commit;-------------------------------------------------------------- ??????etl.ps_log(null, null, null, 2, null, vi_task_id);-- ????oi_return := 0;return;exceptionwhen 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
-- ????:
-- ????:
-- ????:
-- ????:
-- ????:    ????
-- ********************************************************************************isvs_err_msg      varchar2(255);      -- ??????beginif ii_task_status = 1 then-- ????????????select etl.seq_dw_log.nextvalinto oi_task_idfrom dual;insert into etl.ts_log(task_id,            -- ??IDtask_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_logset end_time = sysdate,task_status = '2',task_log = '??????'where task_id = oi_task_id;else-- ??????????ID?????????????update etl.ts_logset 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)
);


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!...

package com.pb.demo1;import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 一群人围成一圈从123报数&#xff0c;如果报到3就退出该圈中&#xff0c;直到最后一个人留下来&a…

动画基础01

在silverlight动画中&#xff0c;动画类型被分为两类&#xff1a;From/To/By&#xff08;线性插值动画&#xff08;Linear Interpolation&#xff09;和关键帧动画 &#xff08;Key-frame Animation&#xff09;。 1.From/To/By 动画&#xff0c;也称为线性插值动画&#xff08…

async中series的实现 javascript构件

//同步流程 var seriesfunction(arr){function async(i){arr[i](function(){if(1i<arr.length){async(1i)}})}async(0) } //demo var back1function(callback){setTimeout(function(){cc.log(21)callback()},1000) }series([back1,back1,back1])转载于:https://www.cnblogs.…

Bash中执行存储过程或普通的SQL命令

演示&#xff1a; 在bash中执行一个存储过程和一个普通的SQL语句 0. 前提条件&#xff1a; 数据库&#xff1a;Oracle10g 表&#xff1a;oracle自带的emp表&#xff0c;默认有数据如下&#xff1a; 1. 在bash中执行oracle存储过程 首先&#xff0c;在oracle中建立一个存储过…

用c语言调用动态库

动态加载是在程序运行时用dlopen,dlsym函数进行的。静态加载发生在程序装载时。1.1 用c语言静态方式调用动态库libsthc.so&#xff1a;/** ctest.c* Testing program for libsthc.so library //测试程序为在c语言中调用libsthc.so库* in c languange* */#include "libsth…

hdu3555 Bomb 数位dp

//3555 //题意&#xff1a;统计 1 到 n 中包含 49 的数的个数 1 #include "bits\stdc.h"2 using namespace std;3 __int64 dp[22][3];4 5 int main()6 {7 int i;8 dp[0][0] 1;9 for(i 1; i < 20; i) { 10 dp[i][0] dp[i - 1][0] * 10 - dp…

“AS3.0高级动画编程”学习:第二章转向行为(下)

在上一篇里&#xff0c;我们学习了“自主角色”的一些基本行为&#xff1a;寻找(seek)、避开(flee)、到达(arrive)、追捕(pursue)、躲避(evade)、漫游(wander)。这一篇将继续学习其它更复杂&#xff0c;更高级的行为。 一、对象回避(object avoidance) 对象回避的正式解释为&am…

ruby scala python_解释一个基准在C,Clojure,Python,Ruby,Scala和其他

免责声明我知道人工基准是邪恶的。它们只能针对非常特定的狭窄情况显示结果。我不认为一种语言比另一种语言更好&#xff0c;因为一些愚蠢的长凳。然而&#xff0c;我不知道为什么结果是如此不同。请在底部查看我的问题。数学基准描述基准是简单的数学计算&#xff0c;找到不同…

[Python]两个list对应元素操作(相减)

两个list的对应元素操作&#xff0c;这里以相减为例&#xff1a; # codinggbkv1 [21, 34, 45] v2 [55, 25, 77]#v v2 - v1 # Error: TypeError: unsupported operand type(s) for -: list and list v list(map(lambda x: x[0]-x[1], zip(v2, v1))) print("%s\n%s\n%…

Win7启动修复MBR(Win7+Linux删除Linux后进入grub rescue的情况)

事因&#xff1a;我的笔记本原先同时安装了Win7Linux&#xff0c;昨天发现硬盘实在不够用&#xff08;才60G&#xff0c;虽然还有个500G的移动硬盘&#xff09;&#xff0c;就想把里面的Ubuntu格了。都是用虚拟机做测试的多。后来就格了Ubuntu所在的分区。重启后出现命令窗口&a…

[书籍推荐]《软件设计精要与模式(第2版)》-张逸——提高设计模式及软件设计的方法...

《软件设计精要与模式&#xff08;第2版&#xff09;》是园子里张逸大大今年4月出版的关于软件设计及设计模式方面的书&#xff0c;我是5月下旬到手&#xff0c;每天晚上看一章&#xff0c;断断续续的到昨天晚上总算把全书28章看完了&#xff0c;感受很深&#xff0c;以往在设计…

solor mysql_solr 同步 mysql

一、首先创建一个数据库和表这里创建了一个表&#xff0c;加上了测试数据&#xff0c;注意这里有一个字段来记录更新时间 update_date二、修改配置文件我们首先介绍全量同步&#xff0c;再介绍增量同步我的 solr 版本是 7.5 的&#xff0c;new_core是我创建的 core&#xff0c…

C++调用Python函数

From: http://www.flatws.cn/article/program/c/2010-08-24/9677.html Python代码在实现某些功能的时候非常方便&#xff0c;如果能够将Python代码与C程序结合起来&#xff0c;那么一定会使Problem Solving方便许多&#xff08;比如&#xff0c;游戏脚本系统&#xff09;~ 从学…

配置ubuntu使用console登录登录欢迎提示

使用ssh或console登陆成功后&#xff0c;ubuntu会顺序执行/etc/update-motd.d中的脚本 有些linux的登陆提示信息放在了/etc/ssh/sshd_config中的Banner配置项中 转载于:https://www.cnblogs.com/chen310/p/4431474.html

网络命令大全(9)--runas

Runas 允许用户用其他权限运行指定的工具和程序&#xff0c;而不是用户当前登录提供的权限。语法runas [{/profile/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program 参数/profile 加载用户的配置文件。/profile 是…

java canvas 缩放图片_详解如何用HTML5 Canvas API控制图片的缩放变换

摘要&#xff1a;这篇HTML5栏目下的“详解如何用HTML5 Canvas API控制图片的缩放变换”&#xff0c;介绍的技术点是“html5_canvas、canvas、Html5、控制图片、api、图片”&#xff0c;希望对大家开发技术学习和问题解决有帮助。缩放变换scale(sx,sy)传入两个参数&#xff0c;分…