2013-03-18 58 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

相关问题