2011-10-03 111 views
0

我必須將shell腳本從Oracle轉換爲db2。我在這個論壇上找到了我使用的Oracle腳本的樣本;它看起來像這樣在shell腳本中捕獲db2輸出

#!/bin/bash 
OUT=`$ORACLE_HOME/bin/sqlplus -s user/[email protected] << EOF 
select sysdate from dual; 
exit success 
EOF` 
echo $OUT 

這將輸出「03-OCT-11」(Oracle sysdate)。我的db2腳本看起來像這樣

#!/bin/bash 
db2bin="https://stackoverflow.com/users/db2inst1/sqllib/bin" 
#connect 
$db2bin/db2 connect to myschema; 
#query 
$db2bin/db2 "SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR"; 
#debug 
echo $? 
#check 
if [ $? = "0" ] then   echo "found-do something" 
else  echo "not found-good bye" 
fi 
#terminate 
$db2bin/db2 quit; 

它的工作原理,但不檢索日期;只有「0」或「1」(真/假)。我如何從我的Db2查詢結果中檢索日期?

回答

2

Chris,您的環境變量和您的DB2命令路徑應通過採購db2profile進行設置。使用指定爲命令行一部分的SQL文件或單個語句調用db2命令時,不需要quit命令。直到腳本結束

#!/bin/bash 
. ~db2inst1/sqllib/db2profile 
OUT=`db2 connect to myschema >/dev/null 2>&1; db2 -x values current date` 

你的數據庫連接將保持可用,這樣你就可以重新連接不連續運行的語句。

#!/bin/bash 
. ~db2inst1/sqllib/db2profile 
db2 connect to myschema >/dev/null 
OUT=`db2 -x values current date` 
AAA=`db2 -x " select a from sometable where b = 'c' " ` 
+1

哇!謝謝(你的)信息。不知道這是可行的。奇蹟般有效。投了票。 – Chris

2

我不熟悉db2,但它聽起來像你需要重定向SELECT語句的輸出。

例如,db2 SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR > /tmp/output

點擊此處瞭解詳情:http://www.ibm.com/developerworks/data/library/techarticle/dm-0503melnyk/

編輯:此外,沒有在DB2選擇線輸出到標準輸出?我沒有一個隨時可用的副本來測試:/

+0

它不會選擇線路輸出到標準輸出,但會帶來很多垃圾,版本橫幅。然而,Oracle可以以靜默模式啓動,並且只能輸出查詢結果。謝謝你的幫助。我需要更多地研究這一點。投了票。 – Chris

+0

-x參數可抑制結果集中的標題/標題文本。 –

2

我想明白了:訣竅是使用/ dev/null。

#!/bin/bash 
DB2INSTANCE=db2inst1 
BIN="https://stackoverflow.com/users/db2inst1/sqllib/bin" 
OUT=`${BIN}/db2 connect to myschema > /dev/null 
${BIN}/db2 -x "SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR" 
${BIN}/db2 quit > /dev/null 
` 
echo $OUT 

希望這有助於。