本文提供實用的 Shell 腳本範例,示範如何擷取 DB2 資料並處理、更新資料並取得執行結果。
# SQL 定義
SQL="SELECT AAA, BBB, CCC FROM MYTBL1"
# 執行 SQL
SDATA=`db2 "$SQL"`
# 回傳值判斷
if [ $? -ne 0 ]; then
echo "$SDATA" # 顯示 DB2 錯誤訊息
exit 1
fi
# 處理取得的資料(跳過前 3 行標題與空行)
echo "$SDATA" | sed -e '4,/^$/!d;/^$/d' |
while read AAA BBB CCC; do
echo "AAA IS $AAA, BBB IS $BBB, CCC IS $CCC"
done
# 取得資料筆數
echo "$SDATA" | sed -n -e '/^$/{1,3d;n;s/[^0-9]*\([0-9]*\)[^0-9]*/\1/;p;}' | read CNT
echo "The count of selected data is $CNT."
exit 0
# 更新語句
SQL="UPDATE MYTBL1 SET AAA='2005',BBB='05',CCC='12'"
# 執行 SQL(-a 顯示 SQLCA)
SDATA=`db2 -a "$SQL"`
# 取得 SQLCODE
echo "$SDATA" | sed -n -e 's/^.*sqlcode: \([-,0-9][0-9]*\).*/\1/p' | read SQLCODE
echo "Sqlcode is $SQLCODE."
# 取得 SQLSTATE
echo "$SDATA" | sed -n -e 's/^.*sqlstate: \([-,0-9][0-9]*\).*/\1/p' | read SQLSTATE
echo "Sqlstate is $SQLSTATE."
# 取得更新筆數 (sqlerrd 第 3 個值)
echo "$SDATA" | sed -n -e '/sqlerrd/s/^.*(3) \([-,0-9][0-9]*\).*/\1/p' | read UPDCNT
echo "Updated data's count is $UPDCNT."
# 取得 sqlerrd 第 5 個值
echo "$SDATA" | sed -n -e '/sqlerrd/{n;s/^.*(5) \([-,0-9][0-9]*\).*/\1/;p;}' | read SQLERRD5
echo "Sqlerrd(5) is $SQLERRD5."
db2 -a 顯示完整 SQLCA 以解析錯誤代碼與影響筆數sed 正則表達式從輸出擷取關鍵指標$? 判斷指令執行成敗while read 逐行處理這些腳本模式可直接應用於自動化備份、ETL 處理、批次更新等生產環境場景。