2017-07-12 27 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