Назначение вывода SQL-запроса переменной

10

Я подключаюсь к базе данных oracle, запускаю запрос и присваиваю выходные данные переменной. Но когда я отображаю значение переменной, оно выводится неправильно.

count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off;
           select max(cust_id) from cutomers
           exit;
           END`
           echo $count

Запрос возвращает правильный результат при запуске базы данных. Но переменная "count" имеет неверное значение.

шуни
источник
1
проверьте, соответствует ли отступ исходному коду, теперь, когда я исправил форматирование. (Если совпадает, то это неправильно. Вы не можете сделать отступ для заключительного разделителя здесь-документов, как этот.)
manatwork
Что отображается в обычном режиме и каково значение счетчика при назначении?
ot--

Ответы:

13

Завершающее слово here-doc должно быть единственными символами в строке: отступ не допускается. Также используйте $()вместо обратных галочек - они вложенные.

count=$(sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
       set pagesize 0 feedback off verify off heading off echo off;
       select max(cust_id) from cutomers
       exit;
END
)
echo $count

http://www.gnu.org/software/bash/manual/bashref.html#Here-Documents

Гленн Джекман
источник
2
Вы также можете использовать вкладки с <<-ENDобозначениями. Не пробелы, вкладки!
slm
1
OUTPUT=$( ${OracleClientHome}/sqlplus -S user/pass@database <<EOF
set pagesize 0 linesize 32767 feedback off verify off heading off echo off
select a1.id  || '|' ||
       a1.stmt_begin_date  || '|' ||
       a1.stmt_end_date  || '|' ||
       a1.status  || '|' ||
       a1.total_recs 
from acct_stmt_file a1
 where a1.actp_cd = 'HSA'
   and a1.stmt_begin_date =trunc(sysdate);
exit;
EOF
)

echo -e "\n${OUTPUT}"
Татхагата Мукерджи
источник
1
Почему? Я думаю, что было бы лучше, если бы вы поделились своими идеями с сообществом, а не только с этим фрагментом сценария.
Петер - Восстановить Монику
-1
count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off
           select max(cust_id) from cutomers;
           exit;
           END`

           echo $count

Вы должны использовать точку с запятой в правильном месте.

Emaya
источник
Кроме того, ENDв конце должно быть заподлицо слева, без пробелов перед ним.
Кусалананда