# CHAPTER 7: 実行インタフェース

## 7.1 はじめに

Empressは、SQLインターフェースのDDL、DMLおよびDCLコマンドを 扱うための1セットのコマンドを提供します。 利用可能な実行インターフェースコマンドの要約を以下に示します。

Table 7-1: 実行インタフェースコマンド

コマンド | 概要
`CHANGE WORD` | コマンドへの迅速でシンプルな変更を許可します。
`DATABASE` | 現在のデータベースを表示します。また新しいデータベース名を後ろに指定した 場合、Empressを終了することなく、カレントのデータベースを変更できます。
`DO` | Empressを終了することなく、オペレーティングシステムと通信し、 エディタなどのシステムユティリティを使用します。
`EDIT` | コマンドの変更をするための簡単なラインエディタです。
`EXIT` | Empress SQLセッションを終了します。
`HELP` | 現在のインターフェースを使用し、利用可能なSQL言語のオンライン参照要約を 提供します。
`HOLD` | コマンド実行せず、構文エラー、テーブル名/属性名エラーなどチェックし コマンドの構文解析を行います。ヒストリーリストから、前のコマンドを使用して 現行コマンドを作成します。
`RECALL` | コマンドヒストリーリストを調べて、前出のコマンドを表示します。
`RUN` | 再度タイプする必要なしに、ヒストリーリストからの前出のコマンドを再実行 します。ファイル名が後続する`RUN`は、頻繁に用いられているような コマンドを指定したファイルに格納し、コマンドを実行します。
`RUN REPORT` | リポートスクリプト上で、Emprssリポートライターを起動します。
`SET` | 変数をセットするのに使用します。特別な変数は、作業環境をカスタマイズします。
`SHOW` | 変数値を表示します。
`STORE` | ヒストリーリストのコマンドを、ファイルへ保存します。
`UNSET` | 変数を削除します。 |

## 7.2 CHANGE WORD

The `CHANGE WORD`コマンドを使用し、与えられたコマンドの1文字または 文字列を変更します。それは簡単な変更では、ラインエディタの代用として使用すれば 非常に便利な機能です。 このコマンドは、指定コマンドの即時実行または端末上での表示を簡単に行なえます。

Syntax

      CHANGE [number] [ALL] word [TO] newword [RUN];

  説明

  `number` | `RECALL ALL`コマンドで表示される、ヒストリーリスト中のコマンド番号。
  `word` | コマンド中の単語または句。
  `newword` | 新しい単語または句。

注意

1. これは、現在のコマンド中、またはコマンド番号中の最初に発見される `word`を、`newword`に変更します。

2. `ALL`を指定された場合、コマンド中の全てのwordを変更します。

3. `RUN`が指定された場合、コマンドは即座に実行されます。指定されない 場合には表示されるだけです。

必要な特権

  なし

例

1. 最初に発見された文字列を変更します。

   最初にnameフィールドにJonesを条件にし検索し、次にMoscaを条件にして検索 します。

          SELECT * FROM loans WHERE name = 'Jones';

          CHANGE Jones TO Mosca;
          SELECT * FROM loans WHERE name = 'Mosca';

          RUN;

   単一文字列の場合、キーワードでない限り引用符で囲む必要はありません。

2. 発見された全ての文字列を変更します。

   現在までの操作において、5番目のコマンドの`100`を全て`200`に 変更し、即時に実行します。

          CHANGE 5 ALL 100 TO 200 RUN;

## 7.3 DATABASE

`DATABASE`コマンドは、カレントデータベース名の表示、またはカレント データベースを指定されたデータベースに変更します。

Syntax

  `|DATABASE |DB` | `| [database] [ |` | `|INTO| file]; |ONTO|`

注意

1. `DATABASE`は`DB`と同義語です。

2. `database`は、絶対パスか、明示的なファイル指定でなくてはなり ません。どちらの場合でも引用符で囲む必要があります。

3. `database`を指定しない場合には、カレントのデータベース名が 表示されます。データベースを指定すると、カレントは指定されたデータベースとなり ます。

4. 他のデータベースをアクセスするために、データベースを変更する必要はありま せん。カレント以外のデータベースにあるテーブルをアクセスする場合には、 テーブル名の前にデータベース名:を指定します。データベース名:テーブル名

5. `INTO file`または`ONTO file`を指定した場合には、 処理結果は端末上からファイルへ転送されます。`INTO`を指定した場合は、 既存ファイルを上書き、`ONTO`を指定した場合は、既存ファイルに追記します。 それぞれ既存ファイルがない場合には作成します。

必要な特権

  なし

例

  `/usr/joe`配下に作成されたデータベース`repairs`の場合。

         DATABASE;

  以下を表示します。

         Current Database '/usr/joe/repairs'

  同じ位置に`accounts`データベースがある場合に、カレントデータベースを 変更します。

         % empsql repairs

         * DB;
         Current Database 'repairs'

         * (execute several commands)

         * DB "/usr/joe/accounts";
         Current Database '/usr/joe/accounts'

         * (carry on working with the new database)

## 7.4 DO と !

Empressからオペレーティングシステムへのインタフェースには、`DO` コマンドとエスケープコマンド(!)の2つがあります。

Syntax

  Syntax 1:

  |  |  | `DO 'os_command {` | `|<newline> |;` | `| os_command}'; |`

  Syntax 2:

         ![os_command {; os_command}];

  説明

  `os_command` | システムコマンド。

注意

1. `DO`コマンドは、Empressを停止することなく1つまたは複数の オペレーティングシステムコマンドを実行できます。

2. オペレーティングシステムのエスケープ(!)は、入力として1行しか受け入れません。 従って複数のコマンドを実行する場合は、コマンドをセミコロン(;)で区切る必要が あります。

   UNIX環境でコマンドを指定しない場合は、シェル（変数`MSSHELL`に設定)の モードへ移動します。

必要な特権

  なし

例

1. 1つのオペレーティングシステムコマンド

   カレントディレクトリにあるファイルを表示します。

          do 'ls';

2. 複数のオペレーティングシステムコマンド

   ファイルの表示と日付の表示を行います。

          do 'ls
             date';

3. オペレーティングシステムのエスケープを使用して、1つのシステムコマンドを実行します。

   カレントディレクトリにあるファイルを表示します。

          !ls

4. オペレーティングシステムのエスケープを使用して、複数のシステムコマンドを実行します。

   ファイルの表示と日付の表示を行います。

          !ls; date

5. オペレーティングシステムへエスケープしてファイルを編集します。

   オペレーティングシステムへエスケープしてファイルを編集します。

          * !ed printlist
          62
          .
          .
          .
          .
          .
          w
          73

          *

## 7.5 EDIT

Empressはユーザに`EDIT`コマンドを使用して、ヒストリーリスト からSQLコマンドを編集することを許します。

Syntax

      EDIT [number] [run_command];

  説明

  `number` | ヒストリーリスト中にある編集するコマンドの番号。
  `run_command` | 有効な`RUN`コマンド。`RUN`の章で解説されます。

注意

1. 番号を指定しない場合、入力した最終コマンドが編集されます。ヒストリーリスト のコマンド番号は、RECALL ALLコマンドによって参照できます。

2. `RUN`が指定されている場合には、編集後に直ちに実行されます。指定 されていない場合には表示するだけです。

3. 編集中でも、編集コマンドまたは命令は発行できます。編集命令は1行中での変更 に使用されますが、編集コマンドは全てのコマンド行の処理に使用されます。 リターンキーを押すごとにコマンドの各行とデータが交互に表示されます。行に 非プリント文字がある場合には、その文字は２度表示されます。1回目は文字が表示 され、２回目以降はアッドマーク(@)によって置き換えられます。

4. 各編集コマンドはピリオド(.)から始まり、<Return>を押すことにより終了 されます。編集セッションは、編集コマンドのない最後のライン上で<Return>を 押すか指示を編集することにより終了されます。

   Table 7-2: 編集コマンド

   コマンド | 説明
   .`^` | 前の行に移動します。
   .`d` | 全ての行を表示します。
   .`j` | 現在の行と次の行を結合して、1行にします。
   .`u` | 全ての変更を取り消して、元の状態から編集を開始します。
   .`x` | 現在の行を削除して、次の行を表示する。最終行の場合、前の行を表示する。

5. 編集指示は、現在の行をどのように変更するのかを制御します。この命令は、 通常文字、ポジショニング文字、特殊文字から構成せれます。

   通常文字は、表示行のその位置にある文字を置き換えます。表示行の末尾以降に 置かれた編集行の文字は表示行に追加されます。

   ポジショニング文字（スペース、バックスペース、タブ）は、カーソルを希望の 位置へ移動するのに使用します。タブ文字を入力した後に、バックスペースを押すと タブ文字を入力した位置まで戻ることに注意してください。

   特殊文字は以下に示します。

   Table 7-3: 編集の指示

   指示 | 説明
   `#` | その位置にある文字を削除します。
   `%` | その位置にある文字をスペースに置き換えます。
   `^` | その位置にある文字の前に文字を挿入します。
   `$` | その位置にある文字から後ろを削除し、`$`記号の後に入力した文字で 置き換えます。

   新しい行を挿入したい場合は、バックスラッシュ（\)を編集行で挿入します。 よって以下に示す編集を行なうことにより、1行を2行に分割したり、表示行の真中に 新しい行を挿入できます。

           ^ \ <Return>

   コマンドの全行を編集したら、全行が再表示されます。`RUN`を入力して コマンドを実行する前に、コマンドをチェックしてください。

6. バックスペース、エスケープシーケンス、その他の制御文字などの非表示文字が、 不注意でテキストに入力される場合があります。これはクエリー言語では無効な文字で あり、Empressデータの入力として許可されません。 入力された場合、通常は端末に表示されないので、見つけることも削除することも困難 となります。

   SQLインターフェースコマンドの入力時に、非表示文字が入力されると、 キャラクターが不適切である旨のメッセージが表示されます。 対話型インターフェースを使用して、データの挿入または更新を実行している 場合に、これらの文字が入力されると変換エラーが発生し、ラインエディタが起動され ます。

   Empressラインエディタは、これらの文字を表示する機能を備えています。 これは、テキスト行での文字位置を示し、削除または変更を実行します。コマンドを 行単位で編集する場合、非表示文字は2回表示されます。 1回目は非表示文字が表示され、2回目はこの文字の変わりにアッドマーク(@)が表示 されます。以下に1回目に表示される、非表示文字を示します。

   Table 7-4: 非表示文字

   表示文字 | 文字
   `{bs}` | <Backspace>
   `{esc}` | <Escape>
   `{^c}` | <Ctrl+C> (Cは適当な文字)
   `{tab}` | <Tab>

   非表示文字は、#記号により削除するか、必要に応じて他の文字に変更できます。

   データまたはコマンドにおいてタブは無効とされます。しかしラインエディタ 使用時には{tab}として表示されます。

7. 編集できないコマンドがいくつかあります。一般的にこれらは編集する意味が ありません。それらのコマンドを以下に示します。
   - `CHANGE`
   - `HOLD`
   - `RECALL`
   - `RUN`

   これらのコマンドを編集しようとした場合、その前のコマンドが編集対象とされ ます。他のコマンド、`DO`、`!`、`RUN FROM`を含めて編集が 可能です。

必要な特権

  なし

例

1. 編集例

   クエリー言語の構文エラーを修正する、いくつかの例を示します。

   - 文字の削除

            SELECT aamount FROM loans;
                   #

            SELECT amount FROM loans;

   - 文字をスペースに置き換え

            SELECT aamount from loans;
                   %

            SELECT  amount FROM loans;

   - 文字の挿入

            SELECT amount FROM loans;
                   ^name,

            SELECT name, amount FROM loans;

   - 行の後ろを削除

            SELECT name, amount FROM loans WHERE name = 'Mosca';
                                           $

            SELECT name, amount FROM loans

   - 文字列の置き換え

            SELECT name, amount FROM loans;
                   date

            SELECT date, amount FROM loans;

   - 編集命令の組み合わせ

            SELECT name, aamount FROM loans;
                         #######^ credit_limit

            SELECT name, credit_limit FROM loans;
                                           $personnel;

            SELECT name, credit_limit FROM personnel;
                                                    %INTO 'temp';

            SELECT name, credit_limit FROM personnel INTO 'temp';

     どのような場合でも `.u`の入力により、全ての変更を取り消して、元の 文字列に戻れます。

            SELECT name, credit_limit FROM personnel INTO 'temp';
            .u

            SELECT name, aamount FROM loans;

2. 複数行に渡るコマンドに編集

   以下に複数行の編集例を示します。例ではJonesの$100.00を越すローンを表示 します。

          * SELECT FROM personnel
          . WHEERE amount>$100;

          *** syntax error *** error occurs somewhere in:
          select from personnel
          wheere

          * EDIT;

          SELECT FROM personnel
          <Return>
          WHEERE amount>$100
             #   <Return>
          WHERE amount>$100;
                           \    <Return>
          AND name = Jones   <Return>
          WHERE amount>$100
                       %      <Return>
          WHERE amount> 100
          <Return>
          AND name = Jones;
                     ^'    <Return>
          AND name = 'Jones;
                           ^'   <Return>
          AND name = 'Jones';
          .^   <Return>
          WHERE amount> 100
          .^   <Return>
          SELECT FROM personnel
                      loans$   <Return>
          SELECT FROM loans
          <Return>
          WHERE amount> 100
          <Return>
          AND name= 'Jones';
          <Return>

          SELECT FROM loans
          WHERE amount> 100
          AND name= 'Jones';

          * RUN;

3. ヒストリーリストのコマンドを編集

   ヒストリーリストの6番目のコマンドを、編集後に直ちに実行します。

          EDIT 6 RUN;

4. 非表示文字の編集

   以下のフィールド名に<Ctrl+A>が入力された場合の編集例を示します。

          * SELECT name, amount FROM loans;

          *** Invalid Character *** error occurs somewhere in: select na
          SELECT na{^a}me, amount FROM loans;

          * EDIT;
          SELECT na@me, amount FROM loans;
                   #   <Return>
          SELECT name, amount FROM loans;
          <Return>

          * RUN;

## 7.6 EXIT

`EXIT`コマンドはEmpress対話型SQLを終了するのに使用します。

Syntax

  `|EXIT |STOP` | `| |`

注意

  `STOP`は`EXIT`と同義語です。Empressは終了されます。

必要な特権

  なし

例

  対話型SQLを終了します。

         EXIT;

  または

         STOP;

## 7.7 HELP

Empressは対話型SQLインタフェースに、オンラインヘルプを提供します。

Syntax

      HELP [topic];

  説明

  `topic` | 表示したい項目。

注意

1. `topic`が指定されない場合、利用できる項目の一覧を表示します。

2. ヘルプファイルの追加、ヘルプファイルディクショナリーの変更については、 Empress: Database Administrator's Guide を参照してください。

必要な特権

  なし

例

  `DATABASE`に関するヘルプを表示したい場合には、以下のコマンドを 使用します。

         HELP DATABASE;

  以下の表示を行ないます。

         ________________________Database________________________

         This command prints the name of the current database or changes
         to a new database.

         Syntax

  |  |  |  |  |  | |`DATABASE` |`DB` | | [`database`] [ | | |`INTO`| `file`]; |`ONTO`|

         The keyword "DATABASE" alone prints the name of the
         current database. It may be shortened to "DB". Specifying
         another database name makes DATABASE the current database.

         The output of a "DATABASE" command may be diverted from
         the terminal into a new file or appended to an existing file by
         specifying "INTO" or "ONTO", respectively,
         and a filename.

         For further information, enter:

            HELP display;

## 7.8 HOLD

HOLDコマンドは、前のコマンドを現行コマンドとして反映させます。この場合 コマンドは実行されません。よってこのコマンドにより、構文エラーやテーブル名、 フィールド名のエラーがないかチェックできます。

Syntax

  `HOLD` | `|command |number` | `|; |`

  説明

  `command` | Empress SQLコマンド。
  `number` | ヒストリーリスト中のコマンド番号。

注意

  コマンド`番号`はに指定したコマンドが、現行のコマンドになります。 コマンド番号は`RECALL ALL`コマンドで取得できます。無効なコマンド番号が 指定された場合、以下のメッセージを表示します。

         **** User Error **** Invalid Command

必要な特権

  なし

例

1. 現行コマンドを作成します。

   ヒストリーリストの5番目のコマンドを、現行のコマンドにします。

          HOLD 5;

2. コマンドの構文チェックを行います。

   `SELECT`コマンドの構文チェックを行います。

          HOLD SLECT FROM loans;

   この場合、`SELECT`コマンドの最初の`E`がないので構文エラーと なります。ここでコマンドを編集し訂正できます。

## 7.9 RECALL

`RECALL`コマンドは、`Empress`コマンドヒストリーリストを調べる ために使用します。

Syntax

  `|RECALL |RC` | `| [ |` | `|ALL |number |string` | `|] [ | |` | `|INTO| file]; |ONTO|`

  説明

  `number` | ヒストリーリスト中のコマンド番号。
  `string` | 引用符で囲まれた文字列。

注意

1. `RC`は`RECALL`と同義語です。

2. `RECALL`のみ指定した場合、一つ前に入力した文字を呼び出します。

3. `ALL`キーワードを指定すると、ヒストリーリスト中の全てのコマンドを 検索します。

4. `number`を指定した場合には、ヒストリーリスト上の該当番号の コマンドを表示します。`number`が負の値ではヒストリーリストの 最後尾を基点とし、逆方向に数えて該当するコマンドを表示します。一つ前に実行した コマンドを表示させるには、`RECALL -1`と指定します。

5. 文字列を指定した場合には、ヒストリーリスト中で指定された文字列を含んでいる 全てのコマンドを表示します。ヒストリーリスト中に記憶されるコマンド数は、 Empressシステム変数`MSQLCMDSAVE`に設定できます。この値の初期値は 50です。この値を20に変更したい場合には以下のコマンドを使用します。

          SET MSQLCMDSAVE TO 20;

   この値を変更しても、何か新しいコマンドを実行しないとヒストリーリストは変更 されないことに注意してください。

6. ヒストリーリストに追加されないコマンドは、`RECALL`コマンドで表示 できません。追加されないコマンドは、`CHANGE`、`EDIT`、 `HOLD`、`RECALL`、`STORE`、`RUN`、`START` です。

必要な特権

  なし

例

  `MSQLCMDSAVE`変数が5に設定されている場合、`RECALL ALL`を 実行すると以下のような表示が行なわれます。

         * RECALL ALL;
            8 DISPLAY DB;
            9 SELECT * FROM loans;
           10 UPDATE loans
              SET date TO '28 jun 1990'
              WHERE date = '27 jun 1990';
           11 SELECT * FROM loans WHERE date MATCH "*jun*";
           12 !date

  ここでいくつかの`RECALL`コマンドを実行します。

         * RECALL;
           !date

         * RC 9;
           SELECT * FROM loans;

         * RC -2;
           UPDATE loans
           SET date to '28 jun 1990'
           WHERE date = '27 jun 1990';

         * RC 'loans';
            9 SELECT * FROM loans;
           10 UPDATE loans
              SET date TO '28 jun 1990'
              WHERE date = '27 jun 1990';
           11 SELECT * FROM loans WHERE date MATCH "*jun*";

## 7.10 RUN

`RUN`コマンドはEmpressヒストリーリスト中のコマンドまたは、 オペレーティングシステムファイル中のコマンドを実行します。

Syntax

  Syntax 1:

  |  |  | `|RUN |START` | `| [number] [ |` | `|INTO| file] [ |ONTO|` | `|SET parameter {, parameter} |(parameter {, parameter})` | `|]; |`

  Sytax 2:

  |  |  | `|RUN |START` | `| [FROM] file [ |` | `|INTO| file] [ |ONTO|` | `|SET parameter {, parameter} |(parameter {, parameter})` | `|]; |`

  説明

  `number` | ヒストリーリスト中のコマンド番号。
  `file` | ファイル名。
  `parameter` | Empress数値変数への値。

注意

1. `[FROM] file`を使用すると、クエリーを収録している オペレーティングシステムファイルを読み込み、コマンドを実行します。 `[FROM] file`を使用しない場合には、コマンド番号を実行します。

2. 番号は、ヒストリーリストにあるコマンド番号です。コマンド番号は、 `RECALL ALL`コマンドで表示されます。番号の指定がない場合には、最後に コマンドが表示されます。

3. `INTO file`または`ONTO file`が指定されると、 出力はファイルへ転送されます。`INTO`は既存ファイルを上書きし、 `ONTO`は既存ファイルに追記します。それぞれ、ファイルがない場合には作成 します。

4. `parameters`は、Empress数値変数の値です。指定した 場合、コマンドの第一引数に最初のパラメータがわたされ、指定に応じて第二引数に 2番目のパラメータがわたされます。(詳細は `SET`を参照してください。)

5. `SET`コマンドが収録されているファイルを実行すると、Empressの 環境は変更されます。

必要な特権

  なし

例

1. ヒストリーリストからコマンドを実行します。

   ヒストリーリストの9番を実行します。

          RUN 9;

2. 前のコマンドを再実行します。

   `SELECT`コマンドを実行した場合。

          SELECT number FROM loans WHERE name = 'Jones';

   コマンドを即座に再実行する場合には、以下のコマンドを実行します。

          RUN;

3. 編集後のコマンドを実行します。

   `RUN`コマンドは、編集されたコマンドも実行できます。

          * SELCT amount FROM loans WHERE name = 'Peterson';

          *** syntax error *** error occurs somewhere in:
          selct

          * EDIT;

          SELCT amount FROM loans WHERE name = 'Peterson';
             ^e
          SELECT amount FROM loans WHERE name = 'Peterson';

          * RUN;

          amount

          $50.00

4. ファイル中のコマンドを実行します。

   以下の2つのコマンドを収録した、`showlist`というファイルを作成します。

          SELECT date, amount FROM loans
             WHERE name = 'Peterson';

          SELECT SUM (amount) FROM loans
             WHERE name = 'Peterson';

   コマンドを実行します。

          * RUN FROM showlist;

          date            amount

          June 6, 1983    $50.00

          SUM (amount)
          50.00

          * INSERT INTO loans (name, date, amount)
               VALUES ('Peterson', '19 Aug 1990', '45');

          Number of Records Entered = 1

          * RUN FROM 'showlist';

          date                amount

          June 6, 1990        $50.00
          August 19, 1990     $45.00

          SUM (amount)
          95.00

          *

5. パラメータ付きで、ファイルからコマンドを実行します。

   パラメータを設定し、RUNコマンドで実行させるファイル`seeloans`に、 以下のようなコマンドを記述します。

          SELECT FROM loans
             WHERE name = '$1' AND amount > '$2';

          SELECT SUM (amount) FROM loans
             WHERE name = '$1';

   コマンドを実行します。

          RUN FROM seeloans SET Jones, 200;

   ファイル中の`$1`、`$2`がパラメータにより置き換えられ、 以下のような実行結果を表示します。

          name        date                   amount

          Jones       August 12, 1990        $300.00

          SUM (amount)
          358.95

## 7.11 RUN REPORT

`RUN REPORT`コマンドは、レポートスクリプトにより。 Empress Report Writerを実行します。 a report script.

Syntax

  `[` | `|RUN |START` | `|] REPORT [FROM] script [[ON] data_file] [ |` | `|INTO| file] |ONTO|`

  |  |  | `[` | `|SET parameter {, parameter} |(parameter {, parameter})` | `|]; |`

  説明

  `script` | Empress Report Writerスクリプト。
  `data_file` | `REPORT DUMP`フォーマットでのデータファイル。
  `file` | ファイル名。
  `parameter` | Empress数値変数への値。

注意

1. Empress Report Writerスクリプトは、`SELECT`文を使用して、 テーブルからデータを検索するか、あるいは`REPORT DUMP`フォーマットでの ファイルからデータを読みこみます。

2. `INTO file`または`ONTO file`が指定された場合、 出力はターミナルからファイルに転送されます。`INTO`は既存にファイルに 上書きし、`ONTO`は追記します。それぞれともファイルがない場合には 作成します。

3. `SET`句はEmpress Report Writerスクリプトによって、要求された すべてのパラメータを渡します。

必要な特権

  なし。

## 7.12 SET と UNSET

`SET`コマンドは、Empress変数を設定します。

Syntax

  `SET` | `| | | | | |` | `FROM file`
  `[ALL] [` | `|INTO |ONTO` | `| file] |`
  `variable [TO] value value {, value}` | `|; | | | | |`

         UNSET variable;

  説明

  `variable` | Empress変数。
  `value` | 1から99の数値。

注意

1. `SET`のみを実行した場合、標準以外のシステム変数と初期値が変更されて いるEmpress変数が表示されます。`SET ALL`を実行すると、全ての変数 が表示されます。

2. `INTO`または`ONTO`にファイル名を指定した場合、`SET` コマンドの出力はファイルに転送されます。`INTO`を指定した場合、 既存ファイルに上書きし、`ONTO`を指定した場合には既存ファイルに追記 します。それぞれファイルが存在しない場合には作成されます。

3. `FROM file`を指定した場合には、ファイル名に記述された 設定コマンドにより変数を設定します。

4. 変数は英数字を含んでおり、`SET variable TO value`の 書式で設定できます。変数が既に設定されている場合は、値は変更されます。値に ブランク、タブ、ピリオドなどがある場合には、引用符で囲んで指定します。

5. 1〜99までの数値変数は、`SET value{, value}`により 順番に設定できます。これらの値はパラメータとして、コマンドファイルへわたすこと が可能です。

6. `SET`コマンドが記述されたファイルを、`RUN FROM file` で実行した場合、Empress環境を変更します。

7. UNIX環境変数の値を変更しても、UNIX環境にはまったく影響がありません。

8. `SHOW`コマンドは変数値を表示し、`UNSET`コマンドは変数設定を 無効にします。

必要な特権

  なし

例

1. ファイルからEmpress変数を設定します。

   以下の記述がある`msvars`ファイルがあります。

          MSQLCMDSAVE=20
          MSQLSELCOLSEP="|"
          l=loans
          p=personnel

   以下のコマンドを実行した場合。

          SET FROM msvars;

   結果として変数`MSQLCMDSAVE`に`20`、変数`MSQLSELCOLSEP` に`|`、変数`l`に`loans`、変数`p`に `personnel`が設定されます。

2. 英数字変数の設定

   この例は、`p`と呼ばれる変数をセットし、次にコマンドの中でその値を 使用します。

          SET p TO personnel;
          SELECT FROM $p;

   以下の結果を表示します。

          number     name          phone             credit_limit

          10         Kilroy        426-9681          $500.00
          5          Mosca         426-9681          $750.00
          17         Wladislaw     811-5110           $10.00
          3          Jones         667-2951          $500.00
          8          Peterson      978-6060          $250.00
          4          Scarlatti     961-7363          $100.00
          9          Jordan        964-3335          $250.00

3. 変数に頻繁に用いられているコマンドをセットします。

   頻繁に用いられているコマンドも、変数にセットされる場合があります。 例えば、`getloans`変数に`SELECT FROM loans;`をセットする場合。

          SET getloans TO "SELECT * FROM loans;";

   `SELECT * FROM loans;`のまわりの引用符に注意してください。コマンド中 にスペースが存在するので必要となります。以下のコマンドを実行すると、

          $getloans

   `SELECT * FROM loans;`と同一の処理結果が表示されます。

4. 数値変数の設定

   コマンド

          SET personnel;

   は、`$1`に`personnel`を設定します。

          SET personnel;
          SET loans;

   この場合には、最初に`$1`に`personnel`を設定し、 次に`$1`に`loans`を再設定します。

   同様に

          SET loans, personnel;
          SET Jones;

   これは、`$1`に`loans`を設定し、`$2`に `personnel`を設定します。次に`$1`をJonesに再設定し、 `$2`を解放します。

   数値変数は英数値変数と同様に、通常のクエリーで使用することができますが、 数値変数の場合は、通常`RUN`コマンドと併用します。設定されている 数値変数は`RUN`コマンドの入力時にその設定は解放されますので、変数 を`RUN`コマンドで使用したい場合には、`RUN`コマンド上で明示的に 再設定する必要があります。

   2つのコマンド、

          SET personnel;
          SELECT * FROM $1;

   は、以下の1つのコマンドと同一です。

          SELECT * FROM personnel;

   また、別の`SET value`コマンドを入力しないか、`RUN`コマンド を入力しない限り、`$1`は`personnel`の値を引き継ぎます。

   数値変数を有効に使用するには、コマンドファイルを利用した場合の処理を行なう 場合です。以下のコマンドが記述されたファイルを`jnsloans`とした場合、

          SELECT * FROM loans
             WHERE name = 'Jones' AND amount > 200;

   Jonesの未返済のローン残高を参照したい場合には、次のコマンドを指定します。

          RUN FROM 'jnsloans';

   この方法は簡単で役立ちますが、反面制限が発生します。6人分の参照を行なう場合 には、ファイルを6つ用意する必要があります。

   さらに、以下のコマンドが記述された`hndloans`というファイルについて 考察してみてください。

          SELECT * FROM loans
             WHERE name = '$1' AND amount RANGE $2 TO $3;

   この記述中の`$1`,`$2`,`$3`はパラメータです。パラメータ を使用するコマンドファイルには、必ずわたす必要があります。

          RUN FROM 'fndloans' SET Jones, 200, 5000;

   これで`$1`は`Jones`に、`$2`は`200`、`$3` が`5000`に置き換えられてコマンドが実行されます。

   Kilroyの小額のローンを参照するには、次のコマンドを使用します。

          RUN FROM "fndloans" SET Kilroy, 0, 200;

   このようにコマンドファイルに数値変数を使用した場合、詳細に記述したコマンド よりも適用範囲が広がります。

## 7.13 SHOW

`SHOW`コマンドは、設定されている変数の値を表示します。

Syntax

      SHOW variable {, variable};

  説明

  `variable` | Empress変数。

注意

  このコマンドは、任意のEmpressシステム変数、および`SET` コマンドを使用して設定した任意の変数を表示します。変数が設定されていない場合 には、何も表示されません。

必要な特権

  なし

例

  `SHOW`コマンドの実行例

         SHOW MSQLPROMPT1, MSQLPROMPT2;

  以下の表示を行います。

         MSQLPROMPT1=*
         MSQLPROMPT2=.

## 7.14 STORE

ヒストリーリスト内にある、Empressコマンドは、`STORE`コマンド によりシステムファイルへ保存できます。

Syntax

  `STORE [number] [` | `|INTO|] file; |ONTO|`

  説明

  `number` | ヒストリーリスト中のコマンド番号。

注意

1. 番号が指定されない場合、最後のコマンドが保存されます。コマンド番号は `RECALL ALL`コマンドにより取得できます。

2. ファイルに保存する場合`INTO`また`ONTO`が指定されない場合は、 `INTO`が適用されます。`INTO`は指定ファイル名を上書きし、 `ONTO`は追記します。それぞれファイルがない場合には作成します。

例

ヒストリーリストに、以下のコマンドが保存されている場合。

       * RECALL ALL;
          8 DISPLAY DB;
          9 SELECT * FROM loans;
         10 UPDATE loans
            SET date TO '28 jun 1990'
            WHERE date = '27 jun 1990';
         11 SELECT * FROM loans WHERE date MATCH "*jun*";
         12 !date

以下のコマンドは、ヒストリーリスト内の`SELECT * FROM loans;`コマンド を`loans_file`ファイルに保存します。

       STORE 9 INTO loans_file;