背景
你好,
我使用基于 Unix 的应用程序,该应用程序使用 Intersystems Caché 数据库。由于我对 Caché 不太熟悉,直到最近我才发现我可以打字……
$ cache
...进入数据库。从这里,我发现我可以访问许多内容,例如%FREECNT
报告、^DATABASE
例程(查看/修改数据库的大小和其他属性)和$SYSTEM.SQL.Shell()
.
自从找到 以来$SYSTEM.SQL.Shell()
,我发现了许多可以用来获取数据库信息的东西,特别是使用该%SYS.ProcessQuery
表运行的进程。
我能够成功运行查询 - 例如:
USER>ZN "%SYS"
%SYS>D $SYSTEM.SQL.Shell()
SQL Command Line Shell #Comment - Sql Shell Intro text
--------------------------------
Enter q to quit, ? for help.
%SYS>Select PID As Process_ID, State As Process_Status From %SYS.ProcessQuery
上面的查询将以这种格式返回结果:
Process_ID Process_State
--------------------------------
528352 READ
2943582 HANG
707023 RUN
3 Rows(s) Affected
--------------------------------
问题
考虑到上面确定的背景,我正在寻找一种方法来仅返回没有“SQL 命令行外壳”介绍文本、列名或行计数页脚的结果。当我在 Unix 中编写 .ksh 脚本以连接到 Caché 并运行查询时,如上所示,我返回结果以及以下我不想包含的文本:
SQL Command Line Shell
--------------------------------
Enter q to quit, ? for help.
Process_ID Process_State
--------------------------------
3 Rows(s) Affected
--------------------------------
附加信息
我意识到我可以使用 Unix 命令来过滤掉一些使用awk
and的文本sed
,但我正在寻找一些可能内置的更简单/更清洁的方法。也许有一个silent
orno_column_names
标志的东西,比如这个LINK中的例子。
我的最终游戏是运行一个脚本,该脚本将从查询中获取信息,然后在满足某些阈值时使用该信息对数据库进行更改。最终,我想安排脚本定期运行,因此我需要在服务器上进行所有处理,而不是创建一个单独的客户端应用程序来绑定到数据库。