shell中獲取儲存過程返回值

alei_1304發表於2013-12-26
       由於最近的工作基本都是在與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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章