环境:Unix,DB:Teradata
使用bteq command
,我想在变量
例如:select count(*) from mytable
将结果存储在变量中,以便稍后我可以对变量执行if else。
我不想在文件中存储单个变量然后阅读它。
有没有办法在不使用平面文件的情况下完成此任务?
答案 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手册中的以下命令:
使用正确的设置,您应该只能捕获SELECT COUNT(*) FROM MyTable;
返回的值,然后在shell脚本中解析平面文件以使用该值。此外,您可以以一种可以输入AWK并以相当容易的方式读取列的方式返回多个列。