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變數。
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 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- 儲存過程獲取表被引用的資訊儲存過程
- 獲取某庫某個儲存過程內容儲存過程
- SQL SERVER 儲存過程 獲取三個數中的最大值SQLServer儲存過程
- MySQL儲存過程中捕獲異常的方法MySql儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- PB中呼叫儲存過程儲存過程
- 儲存過程中拼接字串儲存過程字串
- java中呼叫儲存過程Java儲存過程
- shell指令碼獲取函式返回值指令碼函式
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 儲存過程儲存過程
- jsp中呼叫儲存過程JS儲存過程
- 儲存過程中慎用 execute immediate儲存過程
- java中呼叫ORACLE儲存過程JavaOracle儲存過程
- MyBatis 呼叫Oracle儲存過程,傳參、返回遊標的值獲取--示例MyBatisOracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- .NET用使用儲存過程獲取輸出引數的程式碼示例!儲存過程
- MySql儲存過程中limit傳參MySql儲存過程MIT
- 儲存過程中巢狀事務儲存過程巢狀
- oracle 儲存過程中螢幕列印Oracle儲存過程
- 在儲存過程中寫truncate table儲存過程
- oracle儲存過程中的陣列Oracle儲存過程陣列
- Jsp中呼叫Oracle儲存過程JSOracle儲存過程
- ADO中sqlserver儲存過程使用SQLServer儲存過程
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- Oracle儲存過程Oracle儲存過程
- 使用儲存過程儲存過程
- sybase儲存過程儲存過程
- java儲存過程Java儲存過程
- 管理儲存過程儲存過程