2017-03-23 124 views
0

我有以下使用BTEQ执行Teradata存储过程的shell脚本。存储过程返回一个名为BATCH_KEY的varchar。您能否解释如何:在Teradata BTEQ脚本中捕获存储过程输出

捕获存储过程的输出在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 

回答

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