【问题标题】:Capture stored procedure output in Teradata BTEQ script在 Teradata BTEQ 脚本中捕获存储过程输出
【发布时间】:2017-08-15 15:59:04
【问题描述】:

我有以下使用 BTEQ 执行 Teradata 存储过程的 shell 脚本。存储过程返回一个名为 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

【问题讨论】:

    标签: shell stored-procedures teradata


    【解决方案1】:

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

    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
    

    【讨论】:

    • 答案摘要:要从存储过程中提取输出,首先您创建了一个导出文件并将所有内容写入该文件。然后,您已经解析了该文件并获取了所需的数据,在这种情况下,这些数据存在于文件的最后一行。获取所需数据后删除导出文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2021-08-18
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多