Sqlplus脚本部分显示“ Badly Place()”。错误

时间:2020-01-30 23:14:47

标签: shell sqlplus io-redirection csh

我正在编写脚本,尝试从表中获取日期时遇到问题。我在将其存储到变量时遇到问题。我总是得到错误: 放置不正确的()。

变量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 :(得分:0)

我不确定您是否可以在C shell中的反引号内使用here-doc。

将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