【问题标题】:sqlplus removes extra whitespacesqlplus 删除多余的空格
【发布时间】:2019-03-03 14:26:16
【问题描述】:

我有一个下面的测试 ksh 文件

#!/bin/ksh
(
sqlplus -s << EOF
    ${DATABASE}
    SET SERVEROUTPUT ON;
    SET HEAD OFF
    SET FEED OFF
    SET DEFINE OFF
    SET PAGES 0
    SET COLSEP ";"
    WHENEVER SQLERROR EXIT SQL.SQLCODE      
    SELECT 'aaaa  vvvv   cccc'  FROM DUAL;          
    EXIT
EOF
) | while read sql_out
    do
        echo ${sql_out} 
    done

预期的输出是

aaaa  vvvv   cccc

但是观察到的输出是

aaaa vvvv cccc

Sqlplus 正在从我的输出中去除多余的空格,我想保留它。

【问题讨论】:

    标签: bash oracle unix whitespace sqlplus


    【解决方案1】:

    这样做的不是 SQL*Plus,而是 shell。你需要enclose your variable in quotes:

    要在字符串或变量中保留空格,请使用quoting

    所以不是

    echo ${sql_out}
    

    执行以下任一操作:

    echo "${sql_out}"
    printf "%s\n" "${sql_out}"
    

    然后输出将是:

    aaaa  vvvv   cccc
    

    【讨论】:

    • 不要做printf "${sql_out}\n" -- printf 的第一个参数是格式说明符:如果变量的值包含%,则结果很可能不是您所期望的。
    • 太好了...我一直专注于SELECT 'aaaa vvvv cccc' FROM DUAL ... +1