Часть скрипта Sqlplus, показывающая "Badly place () 's." ошибка - PullRequest
0 голосов
/ 31 января 2020

Я пишу скрипт и у меня возникла проблема при попытке получить дату из таблицы. У меня проблемы с сохранением в переменную. Я всегда получаю сообщение об ошибке: Плохо размещенные ().

Переменная TIMEFRAME имеет значение «D», и оболочка фактически попадает в IF, также пароль не является проблемой, так как я использую его для подключения вручную и проверьте запрос (здесь нет проблем).

Это часть скрипта, где у меня возникают проблемы.

#!/bin/csh -f
if ( $TIMEFRAME == "D" ) then
   set TIMEBEG = `sqlplus -s $PASSWORD << EOF \
   set head off; \
   set feed off; \
   select to_char(trunc(sysdate) - 1,'YYYYMMDD') from dual; \
   exit; \
EOF`
set TIMEEND = $TIMEBEG"235959"
set TIMEBEG = $TIMEBEG"000000"
endif

Я также пытался сохранить его в файле, то же самое задача

#!/bin/csh -f
set tmp_file=/tmp/tmp.$$
if ( $TIMEFRAME == "D" ) then
   sqlplus -s $PASSWORD > $tmp_file << EOF \
   set head off \
   set feed off \
   select to_char(trunc(sysdate) - 1,'YYYYMMDD') from dual; \
   exit; \
EOF
set TIMEBEG=`cat $tmp_file`
set TIMEEND = $TIMEBEG"235959"
set TIMEBEG = $TIMEBEG"000000"
endif

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

Когда я пытаюсь использовать -xvf, я получаю следующее:

if ( $TIMEFRAME == "D" ) then
if ( D == D ) then
sqlplus -s $PASSWORD > $tmp_file << EOF set head off set feed off select to_char ( trunc ( sysdate ) - 1,'YYYYMMDD' ) from dual ; exit ; EOF
Badly placed ()'s.

Есть идеи? Это работает на Amazon Linux

1 Ответ

0 голосов
/ 31 января 2020

Я не уверен, что вы можете использовать настоящие c внутренние обратные пометки в C оболочке.

Записать ввод sqlplus в файл вместо записи всей команды sqlplus.

#!/bin/csh -f
set tmp_file=/tmp/tmp.$$
if ( $TIMEFRAME == "D" ) then
    cat > $tmp_file <<EOF
    set head off
    set feed off
    select to_char(trunc(sysdate) - 1, 'YYYYMMDD') from dual;
    exit;
EOF
    set TIMEBEG = `sqlplus -s $PASSWORD < $tmp_file`
    set TIMEEND = $TIMEBEG"235959"
    set TIMEBEG = $TIMEBEG"000000"
endif
...