ITPub博客

首页 > Linux操作系统 > Linux操作系统 > shell中获取存储过程返回值

shell中获取存储过程返回值

原创 Linux操作系统 作者:alei_1304 时间:2013-12-26 15:59:11 0 删除 编辑
       由于最近的工作基本都是在与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博客 ” ,链接:https://blog.itpub.net/7483882/viewspace-1064671/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-02-17

  • 博文量
    12
  • 访问量
    177511