Unix在将值传递给sql语句时添加额外的空格/行

时间:2011-03-11 05:46:48

标签: sql oracle unix plsql ksh

我有一个像这样的unix脚本:

value1=`sqlplus -s ivr/ivr <<EOF  
set heading off;  
set feedback off;  
set linesize 500;  
set serveroutput on;  
set wrap off;  

SELECT FM.getSequence_n('$b_period', '$t_period', '$opr', '$fran', '$poi_s') 
  FROM DUAL;  

exit;  
EOF`  ,

参数作为用户的输入。当我使用'ksh -x filename.sh'在调试模式下运行脚本时,我注意到当unix脚本将值传递给select语句时,它会将其分解为:

SELECT FM.getSequence_n('  
      2010/12/01 - 2010/12/31','  
      2010/12/01 - 2010/12/31','TTSLAP','UWAP','TTSL-LOC') 
  FROM DUAL

...提供错误的输出。当我使用sqlplus中传递的值运行相同的sql语句时,所有值都在一行中,我得到正确的输出。

我需要知道为什么unix会将语句分成多行,如何删除它。这让我做恶梦。首先,我认为价值没有正确传递,这就是输出错误的原因。但是,只有在传递值时由unix进行的换行才是错误的原因。请帮忙。

2 个答案:

答案 0 :(得分:0)

变量的值包括换行符。做这样的事情来检查:

echo "$b_period" | hexdump -C

答案 1 :(得分:0)

您的$b_period$t_period变量似乎包含换行符。如果他们直接从用户那里输入,你真的应该做一些input validation first before using them

尝试类似

的内容
filtered_b_period=`echo $b_period | sed 's/[^0-9\/]*//g'`
filtered_t_period=`echo $t_period | sed 's/[^0-9\/]*//g'`

也许您应该添加进一步检查,但至少您应该能够以这种方式过滤掉不需要的字符。