2017-07-12 24 views
0

我有一个查询(Oracle)的Bash中一样,Oracle查询返回整行中的一行bash的

RETVAL=`sqlplus -S /nolog <<EOF 
     connect $ORCL_USR/[email protected]$ORCL_TNS; 
     SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
     select trim(Colm1) from $MyTable 
    EXIT; 
    EOF` 
Result="Result.txt" 
touch $Result 
echo "$RETVAL" >> "$Result" 
cat $Result 

如果我只是选择一列,那么结果是正确的,每列(我只是有一个列)有一行 所以。

cat Result.txt 
111 
222 
333 

问题是,当我尝试查询2列以上 所以Revalt我把:

select trim(Colm1),trim(column2) from $MyTable 

当我做猫$的Result.txt结果是:

111 
Car 
222 
Hause 
333 
Dog 

的时候我会想

111 Car 
222 Hause 
333 Dog 

因此文件的每行都在一行中。

如何实现它?

在预先感谢恩里克

+1

表中的列数据类型是什么?看起来输出被封装,因为它太宽。 [可能的副本](https://stackoverflow.com/q/3006431/266304)如果你只是需要'设置linesize' .. –

+0

嗨@AlexPoole我thoung相同Column1 - > nummber,Column2-> Varchar 255,它看起来你在说什么。我会试试看。 – Enrique

+1

好的,然后尝试添加'LINESIZE 300'到你的'SET'命令。你为什么使用'trim()'作为数字 - 所以它在左边而不是在右边?使用'to_char()'会更直观。 –

回答

1

可以使用滑命令来获得所需的输出。

sqlplus -S /nolog <<EOF 
connect $ORCL_USR/[email protected]$ORCL_TNS; 
spool filepath/Result.txt 
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
select trim(Colm1),trim(column2) from $MyTable 
EXIT; 
spool off; 
EOF 
cat filepath/Result.txt 
+0

嗨@Lohit感谢您的想法,但与后台我有完全一样的结果。 – Enrique

+1

@Enrique检查列的列宽并相应地设置行大小。我认为linesize超出了列的宽度。 –

+0

嗨@Lohit我做到了,但它没有变好。 :/ – Enrique