UNIX シェルインターフェイスは、 シェル環境からEmpress 問い合わせ言語 を実行するための以下の2つのコマンドを提供します。
シェルインターフェイスを利用することで、迅速にデータベース管理の プロトタイプパッケージを提供することができます。 これは、既存のUNIXプログラム、C ルーチン、他のシェルプログラムから 単純なコマンドで呼び出すことができ、それにより、迅速に データベース管理システムのカスタムインターフェイスの 設計および開発が可能となります。
UNIXシェル上から1つのEmpress SQLコマンドを実行するためには empcmdコマンドを使用します。 コマンドの構文は以下のとおりです。
empcmd database "command"
database | データベースディレクトリの名前 |
command | 実行するEmpress SQLコマンド |
例 1: テーブルからアトリビュート値を検索する
以下のコマンドは、UNIXプロンプト上で repairsデータベースのpersonnelテーブルから すべての従業員のリストを得るために実行します。
empcmd repairs "SELECT name FROM personnel"
このコマンドは、repairsと呼ばれるデータベースに対し、 Empress SQLコマンド "SELECT name FROM personnel" を実行します。empsqlを呼び出す必要はありません。 コマンドの実行後は、UNIXシェルに制御を戻します。
上記のempcmdコマンドを、"names"と名付けたコマンド テキスト(シェルスクリプトファイル)に格納し、UNIXプロンプト上から "names"を入力することで従業員名のリストを出力することも可能です。
例 2: コマンドファイルの引数
"phone"と呼ばれるコマンドファイルに記述された 以下のコマンドは、引数に従業員名を指定し、従業員の電話番号を出力します。
empcmd repairs "select phone from personnel dump where name = '$1'"
"dump"キーワードは、 "phone"のヘッダーを出力させないために empcmdコマンドに指示しています。 "Jones"の電話番号を調べるためには、以下のように入力します。
phone Jones
以下の結果が出力されます。
667-2951
例 3: エラーチェックをともなったコマンドファイル
より完全な"phone"プログラムにするには、 指定された引数が 1つであるかどうかをチェックします。そうではない場合は、 適切なエラーメッセージを出力します。 改良されたバージョンは以下のとおりです。
USAGE = "Usage: phone employee's name" case "$#" in 1) mscmd repairs "select phone from personnel dump where name = '$1'" ;; *) echo $USAGE exit 1 ;; esac
例 4: 対話的なコマンドファイル
"phone"プログラムを より対話的なプログラムにしたい場合、 次のバージョンにおいて、 以下のように記述することができます。
echo " Find phone number given employee's name. To stop, enter '.q' " NAME = NULL = : reprompt for name if no name is given while true do echo -n "Employee name: " read NAME case $NAME in $NULL) continue ;; .q) exit 0 ;; esac echo "" empcmd repairs "select phone from personnel dump where name = '$NAME'" echo "" done
このバージョンは 1 度の開始で複数の電話番号を検索できる利点もあります。
対話的な"phone"プログラムを実行するサンプルダイアログを以下に示します。 パーセント記号"%"は、UNIXオペレーティングシステムのプロンプトを示し、 ユーザーの入力はボールドフォントで表しています。
% phone Find phone number given employee's name. To stop enter '.q' Employee name: Jones 667-2951 Employee name: Petersen 978-6060 Employee name: (You press <Return> by mistake) Employee name: Mosca 544-2243 Employee name: .q %
例 5: 単純なレポート
表形式で出力をするために、"employees"という 小さいシェルプログラム例として示します。 これはすべての従業員に対して名前と電話番号を検索、 およびカウントを行いヘッダー付きで表示します。
: PRINT LIST OF CURRENT EMPLOYEES echo "Current Employees" echo ""empcmd repairs "select name, phone from personnel" EMPLOYEES='empcmd repairs "select count(*) from personnel dump"' echo "" echo "Total number of Employees = $EMPLOYEES"
"employees"を入力すると以下の次の出力が作成されます。
Current Employees name phone Kilroy 426-9681 Jones 667-2951 Mosca 544-2243 Wladislaw 723-6073 Peterson 978-6060 Scarlatti 961-7363 Jordan 964-3335 Total number of Employees = 7
例 6: より複雑なレポート
次の例として、何人かの従業員名を引数として、 その従業員の現在のすべてのローンの詳細と合計残高、 および指定された全従業員のローン残高の総合計を示します。
: PRINT details, total, and grand total of loans : outstanding to the specified employees DATABASE=repairs USAGE="Usage: $0 Employee_name ..." case "$#" in 0) echo $USAGE exit 1 ;; esac for I do echo "Loans currently outstanding to $I:" echo "" empcmd $DATABASE "select date, amount from loans where name = '$I'" echo "" echo -n "Total amount owing for $I: " empcmd $DATABASE "select sum (amount) from loans dump where name = '$I'" echo "" echo "" done : construct a WHERE clause with all the names : given as arguments, joined by ORs clause="where name = '$1'" shift for I do CLAUSE="$clause or name = '$I'" done echo -n "Total amount outstanding over all of the above: " empcmd $DATABASE "select sum (amount) from loans dump $CLAUSE"
Jones と Mosca のローン残高を調べるには、以下のように入力します。
loans Jones Mosca
以下にその出力を示します。
Loans currently outstanding to Jones: date amount 7 February 1992 $33.95 3 April 1992 $25.00 12 August 1992 $300.00 Total amount owing for Jones: 358.95 Loans currently outstanding to Mosca: date amount 2 February 1992 $150.00 4 May 1992 $200.00 Total amount owing for Mosca: 350.00 Total amount outstanding over all of the above: 708.95
empbatchコマンドは、 オペレーティングシステムから Empress SQLコマンドのバッチ処理を 実行することが可能です。 empatchは以下の構文になります。
empbatch database
database | データベースディレクトリ名 |
empbatchコマンドは対話モードで動作します。 この処理は、プロンプトを出力しないEmpress SQLと同じです。 各問い合わせ言語の終了にセミコロン";"を使用し、 コマンドは複数行、指定することが可能です。 プログラムが構文エラーの場合、終了します。
例として、UNIXから以下のように入力した場合、
empbatch repairs
コマンド入力のためにカーソルは、次の行で待ちます。 直接、コマンドを入力をすると
SELECT * FROM loans WHERE name = "Jones";
以下のように出力されます。
name date amount Jones 7 February 1992 $33.95 Jones 3 April 1992 $25.00 Jones 12 August 1992 $300.00
<Ctrl+D> 、 <Rubout> または <Interrupt> キーを押すと、オペレーティングシステムに制御が戻ります。
UNIX コマンドファイルにEmpress SQLコマンドのバッチを記述することができ、 例えば、以下のように記述された"queries"というファイルを作成し、
empbatch repairs << '}' set MSPAGER to 'more -c'; set MSQLAUTOPAGE to true; select * from loans where name = "Jones"; }
以下を入力し、バッチを実行します。
queries
queriesは、 empbatchコマンドへの入力として、 "}"文字まで読み込み、 UNIXのリダイレクション入力を使用します。