Unix ставит лишние пробелы / строки при передаче значений в оператор SQL - PullRequest
0 голосов
/ 11 марта 2011

У меня есть скрипт 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

... что дает неправильный вывод. Когда я запускаю ту же инструкцию sql с переданными значениями в sqlplus со всеми значениями в одной строке, я получаю правильный вывод.

Мне нужно знать, почему Unix разбивает оператор на несколько строк и как это можно удалить. Это дало мне кошмары. Сначала я думал, что значения не были переданы правильно, поэтому вывод был неправильным. Но только эта строка в Unix при передаче значений является причиной ошибки. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

Кажется, что ваши $b_period и $t_period переменные содержат символы новой строки. Если они вводятся непосредственно от пользователей, вам действительно нужно сначала выполнить некоторую проверку ввода, прежде чем использовать их .

Попробуйте что-то вроде

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

Возможно, вам следует добавить дополнительную проверку, но, по крайней мере, вы сможете отфильтровать нежелательные символы таким образом.

0 голосов
/ 11 марта 2011

Значения ваших переменных включают переводы строки.Сделайте что-то подобное, чтобы проверить:

echo "$b_period" | hexdump -C
...