Призначення виводу запиту 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
будь ласка, перевірте, чи відступ відповідає вашому вихідному коду, тепер, коли я виправив форматування. (Якщо збігаються, то це неправильно. Ви не можете відступати
відмінні відмітника

Що відображається у звичайному режимі та яке значення рахується при призначенні?
ott--

Відповіді:


13

Слово, що закінчується тут, має бути єдиним символом у рядку: відступ не дозволений. Також використовуйте $()замість підказок - вони нестабільні.

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позначеннями. Не пробіли, TABS!
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

Ви повинні використовувати крапку з комою в потрібному місці.


Крім того, ENDкінець потрібно залишити ліворуч, не маючи пробілу перед ним.
Kusalananda
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.