如何在不使用平面文件的情况下将bteq命令结果捕获到变量

时间:2014-02-26 14:22:35

标签: unix teradata

环境:Unix,DB:Teradata 使用bteq command,我想在变量

中捕获select语句的结果

例如:select count(*) from mytable 将结果存储在变量中,以便稍后我可以对变量执行if else。

我不想在文件中存储单个变量然后阅读它。

有没有办法在不使用平面文件的情况下完成此任务?

3 个答案:

答案 0 :(得分:3)

不需要文件,只需输出过滤器

query_td () {
bteq << EOBTQ |grep '^>' |sed -e "s/^>//"
.LOGON dsn/user_id,password;
SELECT   '>'||'Dummy test';

.LOGOFF;
.QUIT;
EOBTQ
}


$ var=$(query_td)
$ echo $var
Dummy test

<强>解释

诀窍是在select语句的开头添加额外的char >

SELECT '>'||'Dummy test';

grep '^>'会过滤来自bteq heredoc文档的输出,因此我们只保留query的结果。

最后一步是清理添加到>过滤器中的字符sed -e "s/^>//"

答案 1 :(得分:0)

将您的选择查询放在一个文件中并运行以下shell脚本。您应该在log.txt中输出,您可以从中解析查询输出。

shell.sh:

bteq << EOF >> log.txt
.logon dsn/user_id,password;
.set width 2000;
.run FILE = /home/user_id/query.txt;
.logoff;
.quit;
EOF

答案 2 :(得分:0)

查看BTEQ手册中的以下命令:

  • WIDTH - 设置EXPORT的字符宽度
  • 格式
  • TITLEDASHES - 如果您返回列标题下方的列标记
  • 导出 - 只将SELECT查询的输出写入平面文件。

使用正确的设置,您应该只能捕获SELECT COUNT(*) FROM MyTable;返回的值,然后在shell脚本中解析平面文件以使用该值。此外,您可以以一种可以输入AWK并以相当容易的方式读取列的方式返回多个列。