0

バックグラウンド

やあ、

Intersystems Caché データベースを使用する Unix ベースのアプリケーションを使用しています。私は 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
--------------------------------

追加情報

awkUnix コマンドを使用して、 andを使用してテキストの一部を除外できることはsedわかっていますが、組み込みのもう少し簡単でクリーンな方法を探しています。このLINKsilentの例のように、またはno_column_namesフラグを持つものかもしれません。

私の最終的なゲームは、クエリから情報を取得するスクリプトを実行し、その情報を使用して、特定のしきい値が満たされたときにデータベースに変更を加えることです。最終的には、定期的にスクリプトを実行するようにスケジュールを設定したいので、データベースにバインドする別のクライアント アプリを作成するのではなく、すべての処理をサーバー上で実行する必要があります。

4

2 に答える 2

0

このためのキャッシュ ルーチンを作成します。これは Cache Studio で行うことができます。 http://docs.intersystems.com/ens20131/csp/docbook/DocBook.UI.Page.cls?KEY=GSTD_Routines

ルーチンでは、組み込み SQL または動的 SQL のいずれかを使用してクエリを実行し、結果を反復処理して、WRITE を使用して出力します。将来的にはより柔軟になるため、Dynamic SQL をお勧めします。

SQL の概要: http://docs.intersystems.com/ens20131/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_intro#GSQL_intro_embeddedsql

動的 SQL 情報: http://docs.intersystems.com/ens20131/csp/documatic/%CSP.Documatic.cls?APP=1&LIBRARY=%SYS&CLASSNAME=%SQL.Statement

埋め込み SQL 情報: http://docs.intersystems.com/ens20131/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_esql

于 2013-09-12T17:15:21.337 に答える
0

独自の名前空間に %SQL.Shell の複製クラスを作成し、それを編集できます。Rountine として必要な場合は、ルーチンからこのメソッド ...%Go() を呼び出すことができます。

于 2013-09-13T08:46:57.107 に答える