Как запустить BTEQ Script, используя две таблицы, каждая таблица должна загружаться при отдельном запросе - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь создать сценарий BTEQ , в котором он должен отправлять почту в формате таблицы, таком как TableName, Curent_Date_Loaded и No.of Records Loaded.

У меня twoтаблицы и я ищу результат, например, когда первый запрос BTEQ выполняется и не получает значений (строк), он должен выполняться в следующем запросе, но главное, я хочу только таблицу , которая не получает никаких значений должен выполняться на втором запросе.Если таблица не извлекает какие-либо значения (строки) даже во втором запросе, необходимо сгенерировать сообщение типа " Сегодня таблица не была загружена " с использованием команды Отправить письмо в сценариях

tablecollist.txt содержит

ABC | Load_Date

DEF | Load_Date

В моем случае обе таблицы загружаются в обоих запросах.необходимо.

#! /bin/sh
set -vx

optfile="/home/scripts/opt.txt"
[[ -f $optfile ]] &&  rm $optfile

dbcred="******,******"

touch $optfile

for i in `cat tablecollist.txt`
do
tbl=`echo $i|awk -F '|' '{print $1}'`
col=`echo $i|awk -F '|' '{print $2}'`
done

/usr/bin/bteq << EOF

.LOGON abc${hostsuffix}.xyz.yzx.com/$dbcred;

.SET SEPARATOR '|'
.SET TITLEDASHES OFF;
.SET NULL AS ''

.EXPORT REPORT FILE=$optfile
.SET QUIET ON;

DATABASE par_yzx_db;

sel '$tbl' as tablename, cast($col as date) as Load_Date,count(*)
from $tbl where $col=cast(current_date as date format 'dd-mm-yyyy')
group by cast ($col as date);

.IF ACTIVITYCOUNT =0 THEN .GOTO DoQuery2;

.LABEL DoQuery2;

sel '$tbl' as tablename, cast($col as date) as load_date, count(*) from
$tbl where cast($col as date) = current_date-1 group by load_date;

GOTO End;
.LABEL End;

IF ERRORCODE > 0 THEN .QUIT 10;
.LOGOFF;
.EXIT
EOF
done

cdate=`date +'%F'`
sed -i -e '/tablename/d' $optfile


if [[ -s $optfile ]] ; then
SUBJECT=`echo "Important Tables yzx status: $cdate"`
/usr/bin/awk  -F"|" -v SUBJECT="Subject: ${SUBJECT}" 'BEGIN {
 print "From: abc@xyz.com"
 print "To: 123@xyz.com"
 print "MIME-Version: 1.0"
 print "Content-Type: text/html"
 print SUBJECT
 print "<html><body><table border=1 cellspacing=0 cellpadding=3 style=font-family:Calibri;>"
 print "<tr>"
 print "<td>Table_Name</td>";
 print "<td>Load Date</td>";
 print "<td>Count</td>";
 print "</tr>"
} {
 print "<tr>"
 print "<td>"$1"</td>";
 print "<td>"$2"</td>";
 print "<td>"$3"</td>";
 print "</tr>"
  } END {
 print " </table></body></html>"
} ' $optfile | /usr/sbin/sendmail -t
fi

Ожидаемый результат:

**Table_Name  Load Date Count**    
ABC           19/07/08  46    
DEF           19/07/06  85

Фактический результат:

**Table_Name  Load Date Count**
ABC           19/07/08  46
ABC           19/07/08  46
DEF           19/07/06  85

1 Ответ

1 голос
/ 09 июля 2019

Ваша логика IF неверна, 2-й запрос выполняется независимо от ACTIVITY_COUNT.

sel '$tbl' as tablename, cast($col as date) as Load_Date,count(*)
from $tbl where $col=cast(current_date as date format 'dd-mm-yyyy')
group by cast ($col as date);

.IF ACTIVITYCOUNT > 0 THEN .GOTO END;

sel '$tbl' as tablename, cast($col as date) as load_date, count(*) from
$tbl where cast($col as date) = current_date-1 group by load_date;

.LABEL End;
...