Oracle查询在一行bash中返回整行

Oracle查询在一行bash中返回整行,bash,shell,sqlplus,Bash,Shell,Sqlplus,我在Bash中有一个这样的查询(Oracle) RETVAL=`sqlplus -S /nolog <<EOF connect $ORCL_USR/$ORCL_PWD@$ORCL_TNS; SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF select trim(Colm1) from $MyTable EXIT; EOF` Result="Re

我在Bash中有一个这样的查询(Oracle)

RETVAL=`sqlplus -S /nolog <<EOF
         connect $ORCL_USR/$ORCL_PWD@$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
问题是当我尝试查询2列或更多列时 因此,在Revalt中,我提出:

  select trim(Colm1),trim(column2) from $MyTable
当我执行Cat$Result.txt时,结果是:

111
Car
222
Hause
333
Dog
如果我愿意

111 Car
222 Hause
333 Dog
因此,文件中的每一行

怎样才能做到呢


提前感谢Enrique,您可以使用spool命令获得所需的输出

sqlplus -S /nolog <<EOF
connect $ORCL_USR/$ORCL_PWD@$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

sqlplus-S/nolog表中的列数据类型是什么?看起来输出被包装,因为它太宽了。如果您只需要
设置行大小
。您好@AlexPoole I thoung the same Column1->nummber,Column2->Varchar 255,这似乎就是您所说的。我会试试。好的,然后尝试将
LINESIZE 300
添加到
SET
命令中。为什么要用
trim()
表示一个数字,所以它是左对齐的,而不是右对齐的?使用
到_char()
会更直观。将set LINESIZE 300添加到set命令中并不能解决问题。我之所以使用trim()是因为我想确保数据库中没有空白(即使是数字)。我知道它看起来很傻,但我很失望。嗨@Lohit谢谢你的主意,但对于Spool,我得到了完全相同的结果。@Enrique检查列的列宽,并相应地设置行大小。我认为行大小超过了列宽。Hi@Lohit我做到了,但没有变好/
sqlplus -S /nolog <<EOF
connect $ORCL_USR/$ORCL_PWD@$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