# CHAPTER 5: Empress 変数

## 5.1 はじめに

Empress 問い合わせ言語は、文字列変数のリストとして管理しています。 変数は出力することができ、新しい変数の追加、古い変数の削除、および 変数の値の変更、また使用することが可能です。

変数は、以下の 3 種類があります。

1. 英数字変数。 文字で始まり、文字と数字が含まれた名前。

2. 数字変数。 "1" から "99"までの範囲の名前。

3. システム変数。 Empressによって特定の目的に使用される変数。

英数字変数は、 Empress SQL: リファレンスの `SET`コマンドに 記述されています。

変数の値は、変数名の前にドル記号($)を置くことで参照することができます。 また、変数名の後に特別な文字を入力するための必要がある箇所では、 次のように変数名は、中括弧で囲む必要があります。 `${VARIABLE}` 例えば、`"personnel_file"`というデータファイルから、 データを`"personnel"`テーブルに挿入する場合、 入力の手間を省くために 変数`"p"`を`"personnel"`として、 次のように指定したとします。

       INSERT INTO $p FROM '$p_file';

この場合、変数`p_file`が定義されていないため、 エラーメッセージが表示されるため、次のように入力します。

       INSERT INTO $p FROM '${p}_file';

これにより、目的のコマンドである "`INSERT INTO personnel FROM personnel_file;`" を実現できます。

ドル記号($)は、変数名の拡張であると認識しないようにするには、 ドル記号($)を重複させる必要があります。例えば、 `$$p`は、文字列の`$p`と評価されます。 これは文字列の任意の位置に適応し、各単語の最初だけに適用されるわけでは ありません。 注意として、変数の値を取得するために使用する文字と 区切りとして使用される文字はいずれも、 Empressシステム`MSQLVARCHARS`変数の値を設定すること によって変更できます。 以下の例は、 `"$"`の代わりに`"&"` を指定し、 中括弧の代わりに大括弧を指定します。

       SET MSQLVARCHARS TO &[];

変数の設定は、`SET`コマンドを使用し、 削除は、`UNSET`コマンドを使用します。 変数の参照は、`SHOW`コマンドを使用します。

## 5.2 Empress システム変数

Empressは、行を継続するための文字、またロックされたテーブルに対し アクセスするための試行回数、および`SELECT`コマンドの出力フォーマットなどの システムのデフォルトを決定する数多くのシステム変数を持っています。 これらの変数は、SQLセッション中の問い合わせ言語によって設定するか、 あるいはオペレーティングシステムからの継承による２つの方法があります。

問い合わせ言語からシステム変数を設定するためには、 以下の形式のコマンドを使用します。

       SET variable TO value;

上記の`variable`は、システム変数名であり、 (変数名はすべて大文字でなくてはなりません。） `value`は、値になります。 `value`に、 空白、タブ、ピリオド、コロン、セミコロン、スラッシュ、または改行が 含まれる場合、引用符で囲む必要があります。

### 5.2.1 変数の設定

SQLセッション中の問い合わせ言語によって変数を設定した場合、 現在のセッション中でのみ有効であり、Empressを終了した場合は 再設定する必要があります。 また、オペレーティングシステム上で変数を設定した場合は、 オペレーティングシステムにログオンし続けている間は有効であるため、 SQLセッションの開始、終了を繰り返しても変数は有効です。 オペレーティングシステム上の設定された変数は、 Empress 4GLおよびEmpress Report Writer でも有効になります。

UNIX の場合

  UNIX シェルから変数を設定するために C シェル環境においては `setenv`コマンドを使用します。 また、Bourne シェル環境では`export`コマンドを使用します。

  例えば、変数`MSEDITOR`に ""/usr/ucb/vi""を設定する場合、 C シェル環境では以下のように入力します。

         setenv MSEDITOR /usr/ucb/vi

  B シェル環境では以下のように入力します。

         MSEDITOR=/usr/ucb/vi/
         export MSEDITOR

  毎回の作業セッションにおいて Empressシステム変数のリストを 永続的に保持するためには 以下のいずれかの方法になります。

  1. UNIXファイル上にこれらの変数を設定し、 Empressを起動するたびにこのファイルから変数を設定します。

  2. `.login` (C シェル) または`.profile`(Bourne シェル) ファイルに変数を設定します。この設定方法については、UNIXシステムの ドキュメントなどを参照してください。
Windows NT の場合

  Windows NT環境から変数を設定するためには環境設定コマンドを使用します。 例えば、Windows NT コマンドを使用して変数`MSVALSEP`に""|"" を設定する場合、以下のように入力します。

         set MSVALSEP=|

  また、いくつかのEmpressシステム変数を永続的に設定したい場合は、 1 つの方法としてEmpressシステム変数をユーザー環境変数のリストに 追加することです。この設定方法については、Windowsシステムのドキュメントなど を参照してください。

### 5.2.2 Empress システム変数のリスト

以下にシステム変数のリストとそれぞれの簡単な説明を示します。

表 3-1 パスに関連する変数

変数 | 説明
`MSHELPPATH` | Empress ヘルプファイルディレクトリ
`MSTERMDB` | Empress 4GL端末定義データベース
`MSAPFMDB` | Empress 4GLフォームデータベース
`MS4GLPSHEADER` | Empress 4GLポストスクリプト・ヘッダーファイル
`MSKILLLOGDIR` | Empressユーティリティ`empkill`ログファイルディレクトリ
`MSCRAYQDELLOGDIR` | Empressユーティリティ`empqdel`ログファイルディレクトリ (クレイスーパーコンピュータのみ)
`MSGUIDB` | Empress GUIのシステムディレクトリ
`MSGUIDEFCOLORFILE` | Empress GUIのカラー定義ディレクトリ
`MSSHAREDMEMORYDIR` | `mmap`(メモリーマッピング)で使用されるプラットフォームの メモリーマップファイルディレクトリ

表 3-2 全体に関する変数

変数 | 説明
`MSDATELIMIT` | 2桁の年数の入力のための適切な世紀
`MSDATEPIC` | 入出力のための日付フォーマット
`MSDDLTRANS` | データ定義言語(DDL)コマンドのトランザクションによる保護
`MSDISPLAYKATAKANA` | 半角カナ文字をサポートしていない端末（日本語バージョンのみ)
`MSDOLLAR` | Dollarデータ型のフォーマット
`MSEDITOR` | ".zz"コマンドおよびEmpress 4GLで利用されるエディタ
`MSFILESOPEN` | Empressよってオープンされる最大ファイル数
`MSFORCEPLOCK` | プロセスをメモリにロック（適切な特権を持っていると仮定します。）
`MSINDEXLISTCUTOFF` | テーブルの総レコード数に対するパーセンテージを指定します。 それを超えた場合、検索においてインデックスを使用しません。
`MSINDEXLISTCUTOFFMIN` | `MSINDEXLISTCUTOFF`の設定を無視し、インデックスから検索する最小レコード数
`MSINDEXSORTCUTOFF` | テーブルの総レコード数に対するパーセンテージを指定します。 レコードのソート処理においてこの値を超えた場合にインデックスを使用します。
`MSKEEPNONPRINTCHAR` | 非印刷文字を解釈するフラグ
`MSLANG` | 出力するEmpressメッセージの言語指定
`MSLINECONT` | 行を続けるために使用する文字列
`MSLKCOMMITADDEND` | 連続登録処理間のロックマネージャへのアクセスを減らします。
`MSLOCKPLAN` | Empressよるロック使用情報の提供
`MSNLSCODESET` | 使用しているキーボードおよびモニターに適合するコードセット名
`MSNULLVALUE` | null 値を置き換える文字列
`MSPAGER` | 問い合わせ言語内でページ処理するためのシステムプログラム
`MSPERMS` | Empress出力ファイルのアクセス許可
`MSPRINTER` | プリンタへ出力を送るために使用するシステムプログラム
`MSQUERYPLAN` | Empressによって使用されるインデックス情報を提供します。
`MSSHELL` | Empress 中から使用するシステムのシェル
`MSSORTBYPASS` | ソート処理中でのロックされたレコードをスキップするためのフラグ
`MSSORTSPACE` | ソート処理中に使用されるスペースの制限バイト数
`MSTHRESHOLDPFLSIZE` | 自動的なフラッシュおよびマージがグローバルフリーリストに実行される以前の 内部のプロセスフリーリストの最大サイズ
`MSTMPDIR` | テンポラリファイルを作成するディレクトリ
`MSTMPPFX` | テンポラリファイルに使用されるプリフィックス
`MSVALSEP` | ダンプファイル中のアトリビュート値を分けるために使用される文字列
`MSVERSIONMESG` | 起動時のEmpressバージョンの出力設定
`MSWRAPMARGIN` | 行の中断とラッピングの制御
`MSCASEINSENSITIVE` | 大文字・小文字を区別しない設定
`MSNTMPFILECACHE` | 検索処理中に使用するテンポラリテーブルに関連した テンポラリファイルに使用するキャッシュサイズの指定
`MSQUOTEDIDENTIFIERS` | 引用識別子の許可
`MSSELEXTFETCH` | Empress mr ルーチンの mrprev 関数を使用する場合に 以前のバージョンとの互換性の問題のための設定
`MSSELMAXROWS` | SELECT 文によって Empress 対話型 SQL インターフェースに戻される 最大レコード数（行数）の設定
`MSSELTIMEOUT` | Empress 対話型 SQL インターフェースへ 戻るための SQLの SELECT文の実行の ウェイト秒数の設定
`MSTMPFILECACHESIZE` | 検索処理中に使用するテンポラリテーブルに関連した テンポラリファイルに使用するキャッシュサイズの指定

表 3-3 トランザクション関連の変数

変数 | 説明
`MSTRANSCOMMENT` | トランザクションのコメント文字列
`MSTRANSSYNC` | 即時にファイルへ書き込みさせるフラグ
`MSTRANSTABLELOCK` | トランザクション中は強制的にテーブルレベルロックにするフラグ
`MSTRANSUFNBI` | トランザクション前イメージリストのサイズ
`MSTRANSUFNGFL` | フリーレコードへのアクセス制御
`MSTRANSWARMPROTECT` | ウォームリスタートからトランザクションを保護するフラグ

表 3-4 ロック関連の変数

変数 | 説明
`MSCFEXCLRETRY` | コーディネーターファイルへの排他ロックアクセスのリトライ回数
`MSCFEXCLSLEEP` | コーディネーターファイルへの排他ロックアクセスのリトライ間のインターバル
`MSEXCLRETRY` | ロックファイルへ排他的アクセスをするためのリトライ数
`MSEXCLSLEEP` | ロックファイルへ排他的アクセスをするためのリトライ間のインターバル
`MSIAEXCLRETRY` | 対話型インターフェイスのための排他アクセスリトライ数
`MSIAEXCLSLEEP` | 対話型インターフェイスのための排他アクセスリトライのインターバル
`MSIALOCKRETRY` | 対話型インターフェイスのためのロックリトライ数
`MSIALOCKSLEEP` | 対話型インターフェイスのためのロックリトライのインターバル
`MSINDEXRETRY` | インデックスをロックするためのリトライ数
`MSINDEXSLEEP` | インデックスをロックするためのリトライ間のインターバル
`MSLOCKRETRY` | 実際のロックエントリするためのリトライ数
`MSLOCKSLEEP` | 実際のロックエントリするためのリトライ間のインターバル

表 3-5 クエリ関連の変数

変数 | 説明
`MSQLAUTOPAGE` | すべてのコマンド出力をページ処理プログラムに送るかどうかのフラグ
`MSQLCMDSAVE` | 履歴機能によって保存するコマンド数
`MSQLCOUNT` | 検索、更新、削除されたレコード件数を表示するかどうかのフラグ
`MSQLECHO` | コマンドのエコーの制御
`MSQLONELINE` | 改行がコマンドの終了を指示
`MSQLPROMPT1` | 第1のEmpressプロンプト
`MSQLPROMPT2` | 第2のEmpressプロンプト
`MSQLTRANSACTION` | 各コマンドがトランザクション上で実行され、キャンセルされる可能性があります。
`MSQLVARCHARS` | Empress変数表示で使用される文字

表 3-6 SELECT出力フォーマット関連の変数

変数 | 説明
`MSQLGCHARWIDTH` | パラメータなしのcharcterデータのカラム幅
`MSQLGDATEWIDTH` | パラメータなしのdateデータのカラム幅
`MSQLGDECIMALWIDTH` | パラメータなしのdecimalデータのカラム幅
`MSQLGFLOATWIDTH` | パラメータなしのfloatデータのカラム幅
`MSQLGINTEGERWIDTH` | パラメータなしのintegerデータのカラム幅
`MSQLSELBOX` | 出力データに外枠表示をおこなうかどうかのフラグ
`MSQLSELCOLSEP` | カラムセパレータ文字
`MSQLSELGROUPCOLCROSS` | グループセパレータと交差するカラムに表示する文字
`MSQLSELGROUPSEP` | グループセパレータ文字
`MSQLSELHEAD` | ヘッダーを出力するかどうかのフラグ
`MSQLSELHEADCOLCROSS` | ヘッダーと交差するカラムに表示する文字
`MSQLSELHEADSEP` | ヘッダーセパレータ文字
`MSQLSELKEEPDUPLICATE` | 重複したグループの値を表示するフラグ
`MSQLSELROWCOLCROSS` | カラムと交差する行に表示する文字
`MSQLSELROWSEP` | 行セパレータ文字
`MSQLSELTRUNCATE` | 長い行の切り詰めのフラグ
`MSQLSELWARN` | 関数にnull引数がある場合、警告を表示

表 3-7 オンラインバックアップ関連の変数

変数 | 説明
`MSCOORDTIMERFREQ` | クライアントがコーディネータにチェックインしなければならない期間(秒単位)
`MSOLBBACKUPDEVICE` | オンラインバックアップ装置名
`MSOLBBLOCKSIZE` | オンラインバックアップ装置のブロックサイズ
`MSOLBRECOVERYLOG` | オンラインバックアップのリカバリログファイル

表 3-8 シェアードメモリ関連の変数

変数 | 説明
`MSMKDBSHMEM` | シェアードメモリを伴ったデータベースの作成のフラグ
`MSSHMLOCATION` | シェアードメモリセグメントが存在するシステムアドレスの設定
`MSSHMPERMS` | シェアードメモリパーティションのアクセス許可の設定

表 3-9 ダーティリードとデータストリーミング関連の変数

変数 | 説明
`MSBULKSEGMENTSIZE` | バルクデータの最小ブロックを転送するためのメモリサイズ
`MSVALIDATELEVEL` | チェックサムの結果によってのダーティリードの動作規定
`MSVALIDATERETRY` | 無効なレコードを読むためにEmpressがおこなうリトライ数
`MSVALIDATESLEEP` | 無効なレコードを読むためのリトライ間のインターバル秒数

表 3-10 データベースユーティリティ関連の変数

変数 | 説明
`MSKILLRETRY` | `empkill`が `MSKILLSIGNAL`変数によって指定された終了シグナルを 送るリトライ数 `MSKILLSIGNAL`.
`MSKILLSLEEP` | `empkill`が `MSKILLSIGNAL`変数によって指定された終了シグナルを 送るリトライ間のインターバル秒数
`MSKILLSIGNAL` | `empkill`によって送られる終了シグナル

表 3-11 サーバー/インターネット関連の変数

変数 | 説明
`MSSERVERHEARTBEAT` | データベースサーバーのアイドルタイムをチェックするための期間
`MSSERVERNETTYPE` | サーバーアクセスタイプ
`MSSERVERTERSELOG` | コンパクトなフォーマットのサーバーログファイル情報
`MSINETREPLYTIMEOUT` | 高レベルの応答を待つクライアントのタイムアウト値
`MSINETREPLYRETRY` | 高レベルの応答を待つクライアントのリトライ数
`MSINETMESSAGETIMEOUT` | 確認を待つクライアントのメッセージハンドラのためのタイムアウト値
`MSINETMESSAGERETRY` | 確認を待つクライアントのメッセージハンドラのためのリトライ数
`MSINETPACKETTIMEOUT` | 確認を待つクライアントのパケットハンドラのためのタイムアウト値
`MSINETPACKETRETRY` | 確認を待つクライアントのパケットハンドラのためのリトライ数
`MSGETHOSTTIME` | ホスト情報を検索するためのタイムアウト値
`MSHOSTNAME` | システムのホスト名

表 3-12 オペレーティングシステムに関連した変数

変数 | 説明
`MSGETPW` | ユーザーIDを得るために `getwuid`システムコールの代わりに`getpw`を使用します。 これは互換性のため。
`MSGCWDSIGCHLDRESET` | オペレーティングシステムコール`getcwd`のためにシグナルを リセットします。
`MSCRAYQDELSLEEP` | `empqdel`が、リクエストが死んだかどうかをチェックする前に待つ秒数。 クレイシステムのみで有効。
`MSCRAYQDELRETRY` | `empqdel`が、終了シグナルを送ることを試行する回数。 クレイシステムのみで有効。
`MSCRAYQDELSIGNAL` | `empqdel`ためのシグナル番号またシンボル名の設定。 クレイシステムのみで有効。
`MSMIGRATERETRY` | 移行したファイルへアクセスするためのリトライ数 クレイシステムのみで有効。
`MSMIGRATESLEEP` | 移行したファイルへアクセスするためのリトライのインターバルタイム クレイシステムのみで有効。

表 3-13 レポートライター関連の変数

変数 | 説明
`MSMWNULLOK` | ヌルの出力時のエラーを抑止します。
`MSPAGELENGTH` | レポートのデフォルトページ長
`MSPAGEWIDTH` | レポートのデフォルトページ幅

表 3-14 フォートランインターフェイス関連の変数

変数 | 説明
`MSF77BACKSCAN` | フォートランコンパイラの動作について定義する内部設定
`MSF77BUFCOPY` | フォートラン文字列を補助バッファにコピーする必要があるかどうかフラグ
`MSF77IGNORELENGTH` | フォートラン文字列の受け渡しの長さを無視する設定
`MSF77TERMCHAR` | ASCII(0)の代わりにフォートラン文字列を終了するための文字を与えます。
`MSF90BACKSCAN` | フォートランコンパイラの動作について定義する内部設定
`MSF90BUFCOPY` | フォートラン文字列を補助バッファにコピーする必要があるかどうかフラグ
`MSF90IGNORELENGTH` | フォートラン文字列の受け渡しの長さを無視する設定
`MSF90TERMCHAR` | ASCII(0)の代わりにフォートラン文字列を終了するための文字を与えます。

表 3-15 Empress 4GL 関連の変数

変数 | 説明
`MS4GLCHKNULVAL` | `NOT NULL`アトリビュートのために null 値を見つけます。
`MS4GLCOMPATCHK` | 可能な互換性の問題をチェックします。
`MS4GLDEBUGSETUP` | Empress 4GL デバッガーのセットアップ情報を保存したファイルパス。
`MS4GLFLUSHTYPEAHEAD` | Empress 4GLが反応可能以上に速くタイプされる キーボード入力を保存します。
`MS4GLFONTNAME` | Empress 4GLで使用されるフォント名。
`MS4GLNOLOADRUNMSG` | アプリケーションがコールされた時のインフォメーションメッセージの抑止。
`MS4GLPRINTSCREEN` | 画面ダンプファイル名
`MS4GLPRINTSCREENFORMAT` | 画面ダンプフォーマット
`MS4GLPSWIDTH` | ポストスクリプト出力のためのバウンディング・ボックスの幅
`MS4GLPSHEIGHT` | ポストスクリプト出力のためのバウンディング・ボックスの高さ
`MS4GLXASYNCOFF` | 割り込み処理
`MS4GLXCOLORTOLERANCE` | 色の扱い
`MS4GLXCURSORCOLOR` | テキストカーソルの色
`MS4GLXPOINTERCOLOR` | X Windows ポインタの色
`MS4GLXNEWCOLORMAP` | 使用するカラーマップ
`MS4GLXWINDOWTITLE` | 画面タイトル
`MSTERM` | 端末タイプ
`MSTERMSYS` | 端末タイプのプリフィックス

表 3-16 Empress GUI に関する変数

変数 | 説明
`MSGUIDEFAULTSTYLE` | アプリケーション画面スタイル
`MSGUIFONTSPEC` | Xterm のフォント定義
`MSGUIRGBTEXT` | X Windows の RGB テキストファイルのパス
`MSGUISYSMAIN` | Empress GUI ビルダー システムのメイン画面スタイル

表 3-17 Empress 内部変数

変数 | 説明
`MSSAVECWD` | 作業ディレクトリの値の保存
`MSBUFFERRECORDFACTOR` | バッファリング動作の読み込みレコード数の制御
`MSMAXPROCS` | ロックファイル中のロックマネージャにアクセス可能な最大プロセス数
`MSFILELOCKNBUCKETS` | ロックファイル中のロックマネージャのハッシュ・バケット数
`MSFILELOCKNLOCKS` | ロックファイル中のロックマネージャの最大ロック数
`MSNRECORDCACHE` | レコード数分のキャッシュサイズ
`MSLICENCE` | ライセンス情報

表 3-18 ネットワーク・サーバーに関する変数

変数 | 説明
`MSUSERAUTHCONFIGFILE` | ユーザー認証コンフィグレーションファイル名
`MSNETSERVERCONFIGFILE` | ネットワークサーバーコンフィグレーションファイル名
`MSNETTYPECONFIGFILE` | ネットワークタイプコンフィグレーションファイル名
`MSCONFIGFILEPATH` | ネットワークサーバー関連コンフィグレーションファイルのパス

表 3-19 リプリケーションに関する変数

変数 | 説明
`MSREPLOCKRETRY` | リプリケーション同期の中のマスターテーブル上のロックを取得するためのリトライ数
`MSREPLOCKSLEEP` | リプリケーション同期の中のマスターテーブル上のロックを取得するためのリトライ の間のインターバル
`MSREPENABLUPDATE` | リプリケーションテーブルを更新可能にすることを有効にする内部変数。
`MSREPPURGEINTERVAL` | `MSREPPURGEINTERVAL` は、 削除されたレコードが自動的に消去される前に、 その従属したリプリケーションリプリケートと同期する リプリケーションテーブルに許可する 最大合計時間を設定します。