2014-09-03 154 views
0

我有2個DB2 SQL腳本需要運行。我試圖把它們放在bash腳本中並執行它們。如何在bash腳本中串行運行sql腳本?

這裏是script.sh:

#!/bin/bash 
db2 -tf firstscript.sql; 
db2 -tf secondscript.sql; 

當我運行它,我得到以下錯誤:

DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL1024N A database connection does not exist. SQLSTATE=08003

但我確信,數據庫連接已經存在。

我認爲sql腳本中的命令不是按順序執行的。 因爲當我單獨運行每個命令時,沒有錯誤。 而且,當我運行內聯命令即db2 -tf firstscript.sql;db2 -tf firstscript.sql時,即使這樣代碼也能正常工作。

我認爲它可能與#!/bin/bash有關,所以我將它從script.sh文件中刪除,然後執行它。即使如此,它也會返回相同的錯誤。

什麼是可能的問題及其解決方案?

+0

如果您運行上述腳本,它將按順序執行。如果直接輸入時它們是作品,請嘗試下一個:source myscript.sh'。如果它能起作用,那麼問題可能在於某些bash變量,哪些不會被導出。如果不行,不知道。你運行bash作爲你的命令行shell嗎?什麼打印'ps -p $$'命令? – jm666 2014-09-03 06:56:15

回答

0

當您建立連接時,它將保留在當前環境中。當你調用一個bash腳本時,它會創建一個子shell,並且不會有任何連接。

爲了解決這個問題,就需要通過獲取腳本重用當前的環境(如@ jm666說):

. ./script.sh 

確保對點隨後腳本名稱前添加一個空格。

db2 connect to sample 
. ./script.sh 

僅供參考,腳本中的命令將按照您的定義順序執行。