【问题标题】:How to create and pass an array from KSH to Oracle sqlplus如何创建数组并将其从 KSH 传递到 Oracle sqlplus
【发布时间】:2013-03-18 15:18:07
【问题描述】:

我正在尝试创建一个 KSH 脚本,在该脚本中我正在尝试创建一个数组,该数组将保存包含字符串值列表的文本文件的内容,并将该数组发送到KSH 脚本。这是我到目前为止所做的:

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

       do
       CmResTypUpd 
   done < $text_file

ResTypUpd 执行以下操作:

CmResTypUpd () {
            sqlplus -s $db_user/$db_pass@$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 上运行。

【问题讨论】:

  • 你需要让你的代码更具可读性

标签: arrays loops while-loop sqlplus ksh


【解决方案1】:

你需要将你的行作为参数传递给函数

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

【讨论】:

  • 嗨,Majid,我尝试运行它,但似乎仍然卡住了。所以我对其进行了调试,结果发现问题出在调用包含文本文件及其路径的 var 中。如果我尝试用实际值替换 text_file var,它会起作用。我现在将尝试使用日志文件值而不是其 var 运行整个脚本,但它很奇怪,它也应该与变量一起使用,不是吗?
  • 嗨,Majid,非常感谢 :) 效果很好。关于变量的另一个问题,我通过将 text_file var 调用为一个新的 var 并在 while 循环中使用了新的 var 来解决它。再次感谢 LW
  • 是的,它也应该与变量一起使用。也许您的 $HOME 变量包含空格或特殊字符?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2020-11-06
  • 1970-01-01
  • 2019-05-31
  • 2015-02-09
  • 2014-12-25
相关资源
最近更新 更多