在文件shell中捕获sql查询结果

时间:2017-08-31 14:45:19

标签: sql shell error-handling ingres

我试图捕获通过脚本启动的sql查询的输出。

剧本:

#!/bin/bash
sql articledb <<< "select toppapier from table \g \q"

输出:

INGRES TERMINAL MONITOR Copyright 2008 Ingres Corporation
Ingres Linux Version II 9.2.0 (int.lnx/143)NPTL login
Thu Aug 31 16:38:02 2017

continue
* Executing . . .

E_US0836 line 1, Column 'toppapier' not found in any specified table.
    (Thu Aug 31 16:38:02 2017)

Ingres Version II 9.2.0 (int.lnx/143)NPTL logout
Thu Aug 31 16:38:02 2017

我想将输出重定向到一个文件并且只捕获错误/结果(这里:E_US0836第1行,列&#39; toppapier&#39;在任何指定的表中都找不到。)

我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:1)

Ingres终端监视器(sql)有一些有用的命令,但我不认为这些命令在9.2.0中可用,现在已经很老了;值得检查一下该版本的支持位置。

如果您仍然坚持使用9.2.0并且无法升级,我认为您最好的选择是将输出重定向到文件并检查是否存在错误。我通常使用: egrep&#34; ^ E_ [A-Z] {2} [0-9A-F] {4}&#34;

另一种方法可能是安装更高版本的单独客户端,并使用它来访问现有的9.2.0数据库。 这将允许在终端监视器中使用命令来控制输出的格式 - 例如\ silent,[no] titles,\ vdelim,\ colformat和\ redir(如果你想要错误和查询输出发送到不同的地方很有用)目的地)。 在线文档中有关于这些命令的更多信息。在docs.actian.com上,查找Ingres命令参考指南 - &gt;使用Ingres命令 - &gt; sql命令 - &gt;终端Moitor命令摘要。