対話型インタフェースは、データベースオペレーションをEmpressと の対話形式で実行することを可能にします。対話型インターフェースの下で 利用可能なクエリー言語コマンドを以下に示します。
Table 8-1: 対話型クエリー言語コマンド
コマンド | 概要 |
ALTER | レコードをダンプ、再ロードすることなくテーブルの構造を変更します。 |
CREATE TABLE | フィールド名およびデータタイプの入力を促すことにより、対話的にセットアップ しテーブルを構築します。 |
INSERT | 新しいデータをテーブルに入力します。 |
UPDATE | テーブル中の既存データを変更します。 |
対話型のセッションを制御するために使用されるコマンドの要約は本章の中で示 されます。対話型のインターフェースを起動するために使用されるコマンドも 記述されます。
対話型インタフェースコマンドは、インターフェース使用時における Empressとの対話処理を制御するために使用します。 この一連のコマンドを入力する際には、コマンドとデータを区別するために、必ず ピリオド(.)を各コマンドの前に指定しなければなりません。よろしいですか? のプロンプトが表示される時点では、かならずピリオドが付加されて表示されます。
データ入力時には、インターフェースはデータが必要であればその都度、それに 対する入力要求プロンプトが表示されます。さらにその後で、レコード定義または フィールド定義でとるべき処置に関するプロンプトが表示されます。コマンドの入力後、 インタフェースはその処理操作に応じて、さらにプロンプト表示を続行するか、 あるいはEmpressに制御を戻すかのいずれかの処置をとります。
先行ピリオドがコマンドを示すために使用されているので、ピリオドで入力を開始 する場合には、必ずピリオドを重複して入力しなければなりません(..)。この唯一の 例外は10進数値またはドル値の入力時です。
対話型インタフェースコマンドは、英大文字小文字のいずれを入力しても 構いません。コマンドまたはデータに何も入力せずにリターンキーを押すと、その結果 として、次のフィールドに対する入力要求プロンプトが表示されたり、フィールド定義 に対する入力要求プロンプトが再度表示されたりします。
対話型インタフェースは指定したフィールドに対して、どのような種類の データが要求されているか認識しているため、文字列を引用符で囲む必要はありません。 しかしデータ型と適合しないものを入力するとエラーメッセージを出力します。 INSERTまたはUPDATE処理中のエラーでは、自動的に訂正用の ラインエディタが起動されます。CREATEやALTER処理中のエラーの 場合には、値を入力しなおすだけで済みます。
CREATEとALTER TABLEモードにおいて、フィールドコマンドは フィールド名およびデータタイプに当てはまります。しかし、レコードコマンドは フィールド定義全体に当てはまります。
Table 8-2: 対話型インタフェースのフィールドコマンド
コマンド | ニーモニック名 | 概要 |
.^ | Up | 前のフィールドに対する値のプロンプトを表示します。 |
.>attr | Goto* | 指定されたフィールドに対する値のプロンプトを表示します。 |
.~ | Null* | フィールド値にNULLをセットします。 |
." | Ditto* | フィールド値に、前のレコードでセットしたフィールド値をセットします。 |
.z | Zap* | フィールド値を変更するために、ラインエディタを起動します。 |
.zz | Zapzap* | フィールド値を変更するために、システムのエディタを起動します。エディタの 終了時にデータが入力されます。エディタの終了直前に割り込みキーを押すと、 入力データは消去されてしまいます。システムエディタは変数MSEDITORで 指定されます。 |
*がついているコマンドは、CREATE TABLEまたは ALTER TABLEコマンドでは使用できません。
Table 8-3: 対話型インターフェースのレコードコマンド
コマンド | ニーモニック名 | 概要 |
.d | Display | 現在のレコード名とその値、あるいはフィールド定義を表示します。 |
.e | Enter | テーブルにフィールド定義を入力し、さらに次のフィールド定義を入力するための プロンプトを表示します。 |
.i | Insert | ALTER TABLEコマンドのみに適用します。 .pと.iは、このコマンドの間、無効となります。 |
.n | Next | 次のフィールド定義に進みます。INSERTとCREATEモード内で、 .pコマンドの後で使用できます。 |
.p | Previous | 前のフィールドの定義入力へ戻ります。データを再入力しない限り、データは 変更されません。 |
.r | Reset | INSERTモードの場合は、データ値をNULL値に戻し、 UPDATEモードでは、元のデータ値に戻します。CREATEモードでは、 全てのフィールドをリセットします。 |
.x | Axe | 現在のレコード、またはフィールド定義が削除され、次のフィールドに対する入力 要求を行います。UPDATEモードでは、一度に全てのレコードを削除します。 |
.u | Undo | .xコマンドを取り消します。.xコマンド以外には有効 ではありません。 |
Table 8-4: インタフェースコマンド
コマンド | ニーモニック名 | 概要 |
.q | Quit | 対話型インタフェースを終了します。CREATEモードでは、 テーブルが作成され、ALTERモードでは、変更したフィールド定義が保存され ます。INSERT、UPDATEモードでは、現在入力中のレコードは保存 しません。入力件数、更新件数はEmpressに制御が戻される前に表示されます。 |
.$ | Abort | CREATEまたはALTERモードにのみ有効です。 対話型インタフェースを中断します。テーブルの作成、更新は行いません。 |
.v | Verbose* | 簡略表示を冗長表示に切り替えます。初期設定は簡略表示で、フィールド名のみが 表示されますが、冗長表示ではデータ型も表示されます。 |
.? | Help | 使用可能なコマンドの概要を表示します。 |
.!cmd | System | システムコマンドを実行します。 |
*がついているコマンドは、CREATE TABLEまたは ALTER TABLEモードでは使用できません。
対話型ALTERコマンドは、既存のテーブルに対してレコードをダンプ、 再ロードすることなくテーブル構造を変更します。
Syntax
ALTER table;
注意
Table 8-5: 対話型ALTERのコマンド
コマンド | 概要 |
.? | ヘルプを表示します。 |
.!cmd | 指定されたコマンド(cmd)を実行します。 |
.^ | 前のフィールド入力プロンプトへ移動します。 |
.$ | 中止します。テーブルは変更されません。 |
.d | 入力された情報を表示します。 |
.e | 入力情報をテーブルに保存し、次のフィールドへの入力要求を表示します。 |
.i | **現在のフィールドの前に、新しいフィールドを入力します。 |
.n | *現在のフィールドへの入力をやめ、次のフィールドへ移動します。 |
.p | **前のフィールドへ戻り、再入力要求します(既に入力されたものは失われません) 。連続して.pコマンドは使用できません。 |
.q | 対話型インタフェースを終了し、Empressへ制御を戻します。 入力されたテーブル情報で変更されます。 |
.r | 現在のフィールド値をNULLにリセットします。 |
.x | *現在のフィールドを削除します。 |
* .pコマンドの後でのみ有効です。
** .pコマンドの後では
有効ではありません。
例
対話型ALTERコマンドの例を示すために、loansテーブルを 変更してみます。nameフィールドの文字数を25から15に変更し、name フィールドの後に、loan_numberフィールドを、amountフィールド の後にdate_dueフィールドを追加します。
* ALTER loans;
Name for Attribute #1: number Data Type: integer .n |
このフィールドはスキップします。 | |||
Name for Attribute #2: name Data Type: char Maximum Number of Characters: 25 15 Type: 1 Allow Null Values? y Ready. e |
長さを変更します。 | |||
Name for Attribute #3: date Data Type: date .i |
dateフィールドの前に新しいフィールドを追加 します。 | |||
Name for Attribute #3: loan_number Data Type: integer Ready.e |
||||
Name for Attribute #4: date Data Type: date .n |
このフィールドはスキップします。 | |||
Name for Attribute #5: amount Data Type: dollar .n |
このフィールドはスキップします。 | |||
Name for Attribute #6: date_due Data Type: date Type: 1 Allow Null Values? y Ready .e |
次のフィールド追加のためのプロンプト。 | |||
Name for Attribute #6: .q |
* DISPLAY loans; *** loans **** number integer name char(15, 1) loan_number integer date date(1) amount dollar 6, 1) date_due date(1) * SELECT FROM loans; number name loan_number date amount due_date 5 Mosca 2 February 1990 $150.00 3 Jones 7 February 1990 $33.95 10 Kilroy 16 February 1990 $250.00 17 Wladislaw 27 February 1990 $55.00 3 Jones 3 April 1990 $25.00 5 Mosca 4 May 1990 $200.00 17 Wladislaw 12 May 1990 $25.00 8 Peterson 6 June 1990 $50.00 17 Wladislaw 25 June 1990 $75.00 3 Jones 12 August 1990 $300.00 4 Scarlatti 9 September 1990 $150.00 4 Scarlatti 14 October 1990 $125.00 *
ここでUPDATEコマンドを使用して、新しいフィールド値を設定できます。
対話型CREATEコマンドは、フィールド名やデータタイプを対話式に セットアップし、テーブルを作成します。
Syntax
CREATE table;
注意
Table 8-6: 対話型CREATEのコマンド
コマンド | 概要 |
.? | ヘルプを表示します。 |
.!cmd | 指定されたコマンド(cmd)を実行します。 |
.^ | 前のフィールド入力プロンプトへ移動します。 |
.$ | 中止します。テーブルは変更されません。 |
.d | 入力された情報を表示します。 |
.e | 入力情報をテーブルに保存し、次のフィールドへの入力要求を表示します。 |
.n | *現在のフィールドへの入力をやめ、次のフィールドへ移動します。 |
.p | **前のフィールドへ戻り、再入力要求します(既に入力されたものは失われません) 。連続して.pコマンドは使用できません。 |
.q | 対話型インタフェースを終了し、Empressへ制御を戻します。 入力されたテーブルが作成されます。 |
.r | 現在のフィールド値をNULLにリセットします。 |
.x | *現在のフィールドを削除します。 |
* .pコマンドの後でのみ有効です。
** .pコマンドの後では
有効ではありません。
例
ここでは、repairsデータベースにpersonnelテーブルを 作成する例題です。
* CREATE TABLE personnel; Name for Attribute #1: number Data Type: integer Allow Null Values: y Ready .e Name for Attribute #2: name Data Type: char Maximum Number of Characters: 20 Type: 1 Allow Null Values: y Ready .e Name for Attribute #3: phone Data Type: char Maximum Number of Characters: 15 Type: 1 Allow Null Values: y Ready .e Name for Attribute #4: credit_limit Data Type: dollar Maximum Number of Dollar Digits: 6 Type: 1 Allow Null Values: y Ready .e Name for Attribute #5: .q
対話型INSERTコマンドは、テーブルにデータを入力します。
Syntax
Syntax 1:
INSERT [INTO] table [ | |(*) |(item {, item}) |
|]; | |
Syntax 2:
INSERT [INTO] table | |SET |SHOW |
| | |
|(*) |item {, item} |
| {[:] | |
|SET |SHOW |
| | |
|(*) |item {, item} |
|}; | |
説明
item | attr [PRINT header] |
注意
Table 8-7: 対話型INSERTのコマンド
コマンド | 概要 |
.? | ヘルプを表示します。 |
.!cmd | 指定されたコマンド(cmd)を実行します。 |
.^ | 前のフィールド入力プロンプトへ移動します。 |
.attr | 指定されたフィールドのデータ入力要求に移動します。 |
.~ | フィールド値をNULLにセットします。 |
." | 前のレコードでセットされたフィールド値と同じ値をセットします。 |
.d | 入力された情報を表示します。 |
.e | 入力情報をテーブルに保存し、次のフィールドへの入力要求を表示します。 |
.n | *現在のフィールドへの入力をやめ、次のフィールドへ移動します。 |
.p | **前のフィールドへ戻り、再入力要求します(既に入力されたものは失われません) 。連続して.pコマンドは使用できません。 |
.q | 対話型インタフェースを終了し、Empressへ制御を戻します。 入力されたテーブルが作成されます。 |
.r | 現在のフィールド値をNULLにリセットします。 |
.u | 前に発行された.xコマンドを取り消します。.xコマンドの直後 でないと有効ではありません。 |
.v | 簡略表示と詳細表示の切り替えをします。 |
.x | *現在のフィールドを削除します。 |
.z | ラインエディタを起動します。 |
.zz | システムファイルエディタを起動します。 |
* .pコマンドの後でのみ有効です。
** .pコマンドの後では
有効ではありません。
例
シンプルな例
loansテーブルへのシンプルなINSERTコマンドです。
INSERT loans;
NULL値は、(.~)を使用すれば、対話型インタフェースコマンドで入力する ことができます。
nameフィールドとamountフィールドだけにデータを挿入した 場合には、以下のいずれかのコマンドを使用します。
INSERT loans SET name, amount; INSERT loans (name, amount);
入力した値を、再表示させながら行ないたい場合には、以下のコマンドを使用 します。
INSERT loans SET name, amount SHOW name, amount;
この場合、データを入力する場合には、以下のように表示されます。
name: Jones amount: 25 name: Jones amount: $25.00 Ready . e name:
テーブルに複数のレコードを挿入する必要がある場合、対話型インタフェース のINSERTモードを使用します。
* INSERT INTO personnel;
number: 10 name: Kilroy phone: 426-9681 credit_limit: 500.00 Ready .e |
||||
number: 5 name: Mosca phone: 544-2243 credit_limit: 250.00 Ready .d |
挿入前にレコードを表示します。 | |||
number: 5 name: Mosca phone: 544-2243 credit_limit: $250.00 Ready .e |
||||
number: 17 name: Wladisslow phone: .^ name: Wladisslow Wladislaw phone: 723-6073 credit_limit: $50.00 Ready .e |
入力ミスを修正するために、前のフィールドに 移動します。 | |||
number: 3 name: Jones phone: 667-2951 credit_limit: 500.00 Ready .e |
||||
number: 4 name: Peterson phone: 978-6060 credit_limit: 250.00 |
||||
Ready .>number |
入力ミスを修正するために、先頭のフィールドに移動します。 | |||
number: 4 8 name: Peterson .e |
||||
number: .v |
冗長表示に切り替えます。 | |||
number[integer]: 4 name[char(20,1)]: phone[char(15,1)]: .^ name[char(20,1)]: Scarlatti phone[char(15,1)]:961-7363 credit_limit[dollar(6,1)]: 100.00 Ready .e |
<Return> 入力ミスを修正するために、 前に戻ります。 | |||
number[integer]: .v |
簡略表示に切り替えます。 | |||
number: 9 name: Jordan phone: 964-3335 credit_limit: 250.00 Ready .e number: .q Number of Records Entered = 7 * |
テキストデータの入力
TEXTデータタイプは、他のデータタイプより多少複雑です。以下に示す 例は、TEXTフィールドへのデータの入力と更新にに関するものです。 バックスラッシュ(\)は、データ中に改行を入力することに注意してください。
* INSERT customers; name: Mr. R. Lucas address: 1423 Beach Drive,\ Bayville, CA 92308 comments: Can always be sold something new and\ flashy - likes chrome\ and colored stuff, also little gadgets. Ready .e name: Mr. J. Phillips address: 63 Shore Bvde.,\ Gull Point, CA 92309 comments: Pays bills 2 months late - needs to be\ threatened with a collection agency Ready .e name: Mr. B. Wilson address: 14 Valley View Drive,\ Bayville, CA 92308 comments: Good customer - give credit if he asks for it. Ready .e name: Ms. C. Marshall address: 12 Berkeley St.\ Gull Point, CA 92309 comments: Suggest vacuum & wash; she keeps 3 dogs.\ Look for dog hair collecting in engine. Ready .e name: Mr. J. Lee address: 3260 Church St.,\ Gull Point, CA 92309 comments: Father pays billsÑcheck with R. Lee before\ accepting a job,\ but don't let Johnny know you're doing so. Ready .e name: .q Number of Records Entered = 5
対話型UPDATEコマンドは、テーブル中の既存のデータを変更します。
Syntax
Syntax 1:
UPDATE table [ | |(*) |
|(item {, item}) |] [where_clause]; |
| |
Syntax 2:
UPDATE table | |SET |SHOW |
| | |
|(*) |item {, item} |
| {[:] | |
|SET |SHOW |
| | |
|(*) |item {, item} |
|} | |
[where_clause];
説明
item | attr [PRINT header] |
where_clause | WHERE句 |
注意
Table 8-8: 対話型UPDATEのコマンド
コマンド | 概要 |
.? | ヘルプを表示します。 |
.!cmd | 指定されたコマンド(cmd)を実行します。 |
.^ | 前のフィールド入力プロンプトへ移動します。 |
.attr | 指定されたフィールドのデータ入力要求に移動します。 |
.~ | フィールド値をNULLにセットします。 |
." | 前のレコードでセットされたフィールド値と同じ値をセットします。 |
.d | 入力された情報を表示します。 |
.e | 入力情報をテーブルに保存し、次のフィールドへの入力要求を表示します。 |
.n | 現在のフィールドへの入力をやめ、次のフィールドへ移動します。 |
.p | **前のフィールドへ戻り、再入力要求します(既に入力されたものは失われません) 。連続して.pコマンドは使用できません。 |
.q | 対話型インタフェースを終了し、Empressへ制御を戻します。 入力されたテーブルが作成されます。 |
.r | 現在のフィールド値をNULLにリセットします。 |
.u | 前に発行された.xコマンドを取り消します。.xコマンドの直後 でないと有効ではありません。 |
.v | 簡略表示と詳細表示の切り替えをします。 |
.x | 現在のフィールドを削除します。 |
.z | ラインエディタを起動します。 |
.zz | システムファイルエディタを起動します。 |
** .pコマンドの後では有効ではありません。
例
シンプルな更新
以下にレコードの削除と更新の例を示します。
* UPDATE personnel;
number: 10 name: Kilroyp hone: 426-9681 credit_limit: 500.00 Ready . x |
レコードを削除します。 | |||
number: 5 name: Mosca phone: 544-2243 426-9681 credit_limit: 500.00 750.00 Ready .d |
新しいデータを入力します。 更新された レコードを表示します。 | |||
number: 5 name: Mosca phone: 426-9681 credit_limit: 750.00 Ready .e number: 17 .q Number of Records Deleted = 1 Number of Records Updated = 1 * |
特定のフィールドのみ更新します。
UPDATEモードでは、全てのフィールドを更新するのではなく、 特定フィールドのみ更新することが可能です。以下に示す例では、name フィールドを確認用に表示させ、phoneフィールドを更新するというもの です。この場合、nameフィールドとphoneフィールド以外の フィールドは、表示もされません。
* UPDATE personnel SHOW name : SET phone;
name: Kilroy phone: 426-9681 Ready .n name: Mosca phone: 544-2243 382-2791 |
電話番号を変更します。 | |||
Ready .d |
レコードを表示します。 | |||
name: Mosca phone: 382-2791 Ready .e name: Wladislaw phone: 723-6073 811-5110 |
電話番号を変更します。 | |||
Ready .e name: Jones .q Number of Records Updated = 2 * |
条件付きの更新
UPDATEコマンドにWHERE句を指定した場合、その条件を満たす レコードのみ更新できます。最初の例はnameフィールドがMoscaとJonesの レコードのみ更新し、2番目はnameフィールドWladislawの credit_limitフィールドを更新します。
* UPDATE personnel WHERE name = 'Mosca' OR name = 'Jones'; number: 5 name: Mosca phone: 382-2791 credit_limit: 250.00 500.00 Ready .e number: 3 name: Jones phone: 667-2951 454-6672 credit_limit: 500.00 Ready .e Number of Records Updated = 2 * UPDATE personnel SHOW name : SET credit_limit WHERE name = 'Wladislaw'; name: Wladislaw credit_limit: 50.00 10.00 Ready .d name: Wladislaw credit_limit: 10.00 Ready .e Number of records updated = 1 *
レコードの更新と確認
適切なレコードが更新されているかの確認のために、.dコマンドを使用 しなくても、新しいデータを自動的に表示するコマンドです。
UPDATE loans SHOW name, date, amount : SET DATE, AMOUNT : SHOW date, amount;
テキストデータの更新
更新時にTEXTフィールドのデータを表示する場合、最初に表示長に値する テキストが表示されます。さらに残りの文字数が表示されます。変更を行なう場合 エディタを使用するのであれば、.zまたは.zzコマンドを使用 します。
以下の例では、Empressラインエディタとシステムエディタの /bin/edを使用したものです。
* UPDATE customers WHERE name MATCH '*lucas*';
name: Mr. R. Lucas address: 1423 Beach Drive, Bayville, CA 92308 .z 1423 Beach Drive, 8 |
3を8に変更します。 |
1428 Beach Drive, Bayville, CA 92308 comments: Can always be sold something [75 More Characters] .zz 101 1,$p Can always be sold something new and flashy - likes chrome and colored stuff, also little gadgets. a Try to sell him some of the new Italian car seat covers - he'll probably take them. w 186 q Ready .e Number of Records Updated = 1 *
INSERTモードでのタイプミスを訂正したり、UPDATEモード でのフィールド値を変更するのに、フィールド値全体を入力し直す方法を解説して きました。修正があまり複雑でないものについては、Empressラインエディタは とても有効です。対話型インタフェースから、Empressラインエディタ を起動するには、.zコマンドを使用します。複雑なものについては、 .zzコマンドを使用してシステムエディタを使用するのが便利です。 どのシステムエディタを使用するかは変数MSEDITORで設定します。
以下の例では、Empressラインエディタを使用したものです。
* INSERT loans; name: Moosca date: .^ name: Moosca .z Moosca # Mosca date: 2 February 1983 amount: 150 Ready .e name: .q Number of Records Entered = 1 *
以下の例は、システムエディタを使用したものです。
* INSERT INTO 'auto parts' supplier: AAA Automotive phone: .^ supplier: AAA Automotive .zz
. . . |
システムエディタを起動。 |
part name: hubcap part no.: 9836653 price: 18.40 Ready .e supplier: .q Number of Records Entered = 1
対話型インタフェースの使用中に、不当な文字(バックスペース、 エスケープ、制御文字など)を入力したり、データとデータタイプが一致しない場合 には、編集モードに移りラインエディタが起動されます。以下は無効な日付データを 入力した場合の状況を示します。
* INSERT loans;
name: Mosca date: 12 mey 1990 ** Conversion Error *** invalid month |
||||
** Entering LINE EDITOR *** |
<Interrupt>で編集を中止します。 | |||
12 mey 1990 a 12 may 1990 amount: 32.50 Ready .e |
UNIX上では、<Interrupt>キーを押すとラインエディタが中止されます。 キーを押すと、そのフィールドに対して再度プロンプトが表示されます。 (オペレーティングシステムによっては、<Interrupt>キーの後に、 <Return>キーを押す必要があるものもあります。)