Mini SQL 2.0

システム変数



はじめに

Mini SQL 2.0 は(よく疑似フィールドあるいは疑似カラムとして知られている) システム変数の内部サポートを含んでいます。 これらの変数は、 データベーステーブルからロードされるというより、 むしろデータベースエンジン自体によって情報が供給されるのですが、 普通のテーブルのフィールドをアクセスするのと同じ方法でアクセスすることができます。 システム変数は、サーバよって保守されている情報、 あるいはデータベースに関連しているメタデータにアクセスするために使われます。

システム変数は、アンダースコアの付いた変数名で識別されます。 このような識別は、mSQL ではテーブルあるいはフィールド名に使用できません。 サポートされるシステム変数とそれらの変数の使用例を以下に解説します。



利用できるシステム変数

mSQL 2 のエンジンは現在次のシステム変数をサポートしています。


_rowid

_rowid システム変数はテーブル上のどんなレコードに対してもユニークな、 レコード識別値を提供します。 この変数の値は、テーブルレコードにアクセスするために、 mSQL エンジンによって使われる内部のレコード番号です。 それはテーブルでユニークにレコードを識別するために、 どんなクエリーにでも含めることができます。 このようなクエリーの例は以下の通りです。


select _rowid, first_name, last_name from emp_details
where last_name = 'Smith'

update emp_details set title = 'IT Manager'
where _rowid = 57


候補レコードモジュールはデータベースの性能を上げるために _rowid 値を利用することができます。 2 番目のクエリー例では、 唯一のレコード(57 の内部のレコード ID を持っているレコード) がアクセスされるでしょう。 これはただ 1 つのレコードが更新されるという結果になりますが、 その値を探すためにデータベースを通して、 すべてのレコードを逐次探索するのとは対照的です。 探索を制限するために _rowid 値を使うことは mSQL 2.0 で利用可能な、 最も速いアクセス方法です。 すべての内部アクセスの決定として、 クエリーの WHERE 句に _rowid 値を含む場合は、 テーブルアクセスを _rowid 値に基づかせることは自動的であり、 プログラマやユーザのアクションを要求しません。


_timestamp

_timestamp システム変数は、レコードが最後に修正された時間を持っています。 値は、標準 UNIX タイムフォーマット(エポックタイムからの秒数) で指定されていますが、 アプリケーションソフトウェアによって解釈されるように意図されていません。 値は、アプリケーションが、 特定のレコードがそうしたかどうか決定するかも知れない参照が、 もう1つのテーブルのレコードの前か後に修正される時点として使われるように、 意図されます。 使われている内部表現は、mSQL の将来のリリースで変わる可能性がありますので、 アプリケーションは、この値から実際の時間を決定しようとするべきではありません。

_timestamp システム変数の主な用途は mSQL エンジンの内部にあります。 この情報を使って、 エンジンはレコードが、指定された時間の後に修正された (例の処理の開始)かどうか決定するかも知れません。 それはデータベース複製のために、 リモートデータベースを同期させるためにこの値を使うかも知れません。 これらの機能のいずれも現在利用可能ではありませんが、 レコードの timestamp の存在は、完成の第一歩です。

クエリーの例はこうかもしれません。


select first_name, _timestamp from emp_details
where first_name like '%fred%'
order by _timestamp

select * from emp_details
where _timestamp > 88880123



_seq

_seq システム変数は、選択されているテーブルの、 現在のシーケンス値にアクセスするために使われます。 順序としては、まず現在のシーケンス値が返されます、 それからシーケンスは次の値に更新さます。 (シーケンスについての詳しい情報は、言語仕様セクションの CREATE セクション参照)

_seq の使用例はこうです。

select _seq from staff


_sysdate

サーバは現在の標準時刻と日付を供給することができます。 どんなテーブルからでも SELECT されると、 _sysdate システム変数は、 標準 UNIX タイムフォーマットを使っているサーバマシンの上に、 現在の時刻とデートを返します(エポックからの秒数)。

_sysdate の使用例はこうです。

select _sysdate from staff


_user

どんなテーブルからでも、 _user システム変数を選ぶことによって、 サーバーはクエリーを発行したユーザのユーザ名を返します。

_user の使用例はこうです。

select _user from staff




Copyright © 1996 Hughes Technologies Pty Ltd.
訳:宮前 竜也