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のリダイレクション入力を使用します。