在Teradata BTEQ脚本中捕获存储过程输出

时间:2017-03-23 08:00:56

标签: shell stored-procedures teradata

我有以下shell脚本,它们使用BTEQ执行Teradata存储过程。存储过程返回名为BATCH_KEY的varchar。你能解释一下如何:

在BTEQ脚本中捕获存储过程的输出?将输出传递给shell脚本?让shell脚本返回输出值吗?

echo "Check if number of parameters is correct"
if [ "$#" -ne 4 ]; then
    echo "You must enter exactly 4 command line arguments"
    exit 0
fi

echo "Call bash profile"
source ~/.bash_profile

echo "Setting parameters value for the stored procedure"
in_P_BATCH_OWNER=$1
in_P_ACTION=$2
in_P_START_DATETIME=$3
in_P_END_DATETIME=$4

echo "Logging into Teradata"
Server=server
LoginId=user
Password=password
DbName=db

echo "Calling stored procedure"
bteq<<EOF
.logon ${Server}/${LoginId},${Password};
CALL $DbName.SP_AUDIT_BATCH('$in_P_BATCH_OWNER', '$in_P_ACTION', '$in_P_START_DATETIME', '$in_P_END_DATETIME');
.logoff;
.quit;
EOF

if [ $? == 0 ]
then
   echo "Script executed sucessfully"
   exit 1
else
   echo "Script executed with failure"
   exit 0
fi

1 个答案:

答案 0 :(得分:0)

这是解决方案,感谢我的团队成员!)

echo "Check if number of parameters is correct"
if [ "$#" -ne 4 ]; then
    echo "You must enter exactly 4 command line arguments"
    exit 1
fi

echo "Call bash profile"
source ~/.bash_profile

echo "Setting parameters value for the stored procedure"
in_P_BATCH_OWNER=$1
in_P_ACTION=$2
in_P_START_DATETIME=$3
in_P_END_DATETIME=$4

echo "Logging into Teradata"
Server=server
LoginId=user
Password=password
DbName=db

echo "Calling stored procedure"
bteq<<EOF
.logon ${Server}/${LoginId},${Password};
.export file=/opt/scripts/data_quality/batch_key.txt;
CALL $DbName.SP_AUDIT_BATCH('$in_P_BATCH_OWNER', '$in_P_ACTION', '$in_P_START_DATETIME', '$in_P_END_DATETIME');
.export reset;
.logoff;
.quit;
EOF

if [ $? == 0 ]
then
   echo "BTEQ script executed sucessfully"
   out_P_BATCH_KEY=`tail -1 /opt/scripts/data_quality/batch_key.txt`
   echo "BATCH_KEY=$out_P_BATCH_KEY"
   rm -f /opt/scripts/data_quality/batch_key.txt
   exit $out_P_BATCH_KEY
else
   echo "BTEQ Script executed with failure"
   exit 1
fi