2013-03-18 52 views
0

我試圖創建一個KSH腳本,我試圖創建一個數組來保存文本文件的內容,其中包含一個字符串列表值,並將該數組發送到KSH腳本中的SQL函數。這是我到目前爲止已經完成:如何創建KSH並將數組傳遞給Oracle sqlplus

export text_file=$HOME/values.log 
while read **line**; 

     do 
     CmResTypUpd 
    done < $text_file 

的ResTypUpd執行以下操作:

CmResTypUpd() { 
      sqlplus -s $db_user/[email protected]$db_inst <<EOF 

      SET VERIFY OFF 
      SET HEADING OFF 
      SET PAGESIZE 200 
      SET LINESIZE 200 
      SET FEEDBACK OFF 

      update My_Table set Column_Field_To_Change='NEW_VALUE' where IND1_COLUMN_VALUE='SomethingSomething' and IND2_COLUMN_VALUE='**$line**'; 
      commit; 
    exit; 

    EOF 

      } 

我得到的是該腳本掛起,什麼都不做。

此外,該腳本應該能夠運行跨平臺,即任何UnixLinux的含義。

+0

你需要讓你的代碼更可讀 – 2013-03-18 15:21:01

回答

0

您需要將您的線路作爲參數傳遞給函數

export text_file=$HOME/values.log 
while read line; do CmResTypUpd "$line"; done < $text_file 

而且你的函數:

CmResTypUpd() { 
    [...] 
    update My_Table set Column_Field_To_Change='NEW_VALUE' 
    where IND1_COLUMN_VALUE='SomethingSomething' and IND2_COLUMN_VALUE='$1'; 
    [...] 
} 

而且還變**line**應該line

+0

嗨馬吉德,我試圖運行它,但仍然似乎卡住了。所以我調試了它,結果問題在於調用包含文本文件及其路徑的var。如果我嘗試用實際值替換text_file var,它將起作用。我將嘗試使用日誌文件值而不是var來運行整個腳本,但它很奇怪,它也應該與變量一起工作,不是嗎? – user2182889 2013-03-18 16:11:39

+0

嗨Majid, 非常感謝:)它工作得很好。關於變量的另一個問題,我通過將text_file var調入一個新的var並在while循環中使用新的var來解決它。 再次感謝, LW – user2182889 2013-03-18 16:25:37

+0

是的,它也應該與變量..也許你的$ HOME變量包含空格或特殊字符? – 2013-03-18 16:50:21