【问题标题】:Assigning multiple column's value from oracle query to multiple variables in Unix将来自oracle查询的多个列的值分配给Unix中的多个变量
【发布时间】:2016-04-17 09:40:57
【问题描述】:

我需要从 oracle 查询中读取 10 列的值并将其分配给 10 个 unix 变量。查询将只返回一条记录(行)。

我尝试在选择查询中使用分隔符 (;) 附加所有这些列,并将其分配给 unix 中的单个变量 (V)。我想我可以使用“cut”并将值分配给 V 中所有必需的 10 个变量。

但问题是某些列具有特殊性,我很难删减所需的细节。有时分隔符(;)本身存在于列值中。代码也很长。

有没有更好的方法将查询中的多个列值分配给 unix 变量?

此外,当我从查询中读取“-e”并将其传递给 unix 变量时,它变为“?e”。有没有办法解决这个问题。

谢谢。

【问题讨论】:

  • 嗨@harish,你能证明你做了什么吗...?
  • 嗨,安迪。我现在没有实际的代码。但是我做了这样的事情......... unix_var=( select 'c1=' ||c1||';'|| 'c2=' ||c2 ||... from table)。 . unix_var 现在将拥有所有列值的单行以及由 ';' 分隔的名称...我想将这些值分配给 10 个 unix 变量.. v1,v2,... v10

标签: oracle shell unix


【解决方案1】:

有很多方法可以做到这一点,具体取决于您想要实现的目标。这是一个特殊情况;作为分隔符。但是,您始终可以使用默认的空格分隔符。

variable=$($ORACLE_HOME/bin/sqlplus -s /  as sysdba <<EOF
set head off
set verify off
set feedback off
select sysdate || ';' || systimestamp from dual;
exit;
EOF
)

sysdate=$(echo $variable | awk -F ';' '{print $1}')
echo 'col1:'$sysdate

systimestamp=$(echo $variable | awk -F ';' '{print $2}')
echo 'col2:'$systimestamp

【讨论】:

  • 您好,感谢您的回复。我是 shell 脚本的新手。请解释一下...... awk -F ';' '{print $1}' 它会寻找第一次出现的分隔符并相应地打印值吗?此外,如果我的 coulm 值之间有空格,例如: col2='Have a nice day'。在上述情况下,{print $2} 将给出列的完整值。
  • awk -F ';' '{print $1}' 会将字符串分成几列,用 ; 分隔。 $1 变量将包含第一列,$2 第二列,依此类推。 $0 是整行。您可以使用awk '{print $1}' 使用默认分隔符 - 空格 - 将字符串分成几列,然后打印第一列。还有其他方法可以做到这一点,但是,您可以通过剪切、阅读等来做到这一点。
  • 谢谢。由于我现在没有系统,我无法尝试它..对此感到抱歉..考虑从表中选择 c1||;||c2..let c1='早上好'。如果我使用上面的代码,我期待 col1='早上好'。我会得到全部价值还是只有“好”。请解释。我的列值中可以有任意数量的空格。这是我的担忧。抱歉问了一切。我现在无法实际尝试.. 谢谢
  • 如果你要用 ; 分隔字符串然后你会得到之间的一切;
  • 非常感谢..我明天也会尝试并更新帖子。你也有任何阅读'-e'的解决方案吗?在 oracle 查询中,它被正确读取为“-e”。但是在unix中,当我打印时它变成'?e'(实际上?是一个倒置的。不知道如何输入它。所以使用?)。我不确定这个垃圾值是怎么来的..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2013-06-03
相关资源
最近更新 更多