shell oracle 存储过程 返回值,shell中获取存储过程返回值

由于最近的工作基本都是在与shell和存储过程打交道,任何任务的开始都是以shell脚本开始,之前的任务是通过shell并行执行,后续的任务依赖于并行的任务是否执行完毕,下一个shell如果获取并行任务是否结束成为了一个难题,最后采取如下方案:

1、每一个并行执行的任务完成之后都写入对应数据的成功标志

2、下一个任务shell脚本每隔一段时间执行一次,判断是否所有标志都为成功,如果成功,执行该shell,于是就需要shell从数据库中获取是否都执行成功的标志。

写了一个oracle存储过程来获取标志

create or replaceprocedure p_getstatus(status out number) as .....;

然后通过shell脚本获取存储过程的返回值,纠结了好长时间,shell脚本大致如下:

#!/bin/bash

value=`sqlplus -S  username/password <

set pagesize 0;

set feedback off;

set verify off;

set heading off;

set echo off;

var policyflag number;

execute  p_getstatus(:flag);

select :flag from dual;

exit;

EOF`

echo $value

if [ $value == 1 ]; then

else

fi

终于搞定,脚本特殊说明以下两点

1、sqlplus 命令必须使用 -S 参数,该参数会过滤掉sqlplus的所有输出,包括与数据库连接成功,断开连接,查询结果等.

2、过程包含输出参数status,需要通过select :flag from dual;将查询结果输出到value变量中。

其实,shell变量和sqlplus 变量处于两种不同的环境,无法直接赋值,将sqlplus的所有输出结果都过滤掉,只保留用户需要的字符串返回给shell环境,作为一个字符串赋值给shell变量。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7483882/viewspace-1064671/,如需转载,请注明出处,否则将追究法律责任。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值