Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

InterSystems TSQL 構文

テーブル参照

InterSystems TSQL では、InterSystems IRIS® データ・プラットフォームの SQL 形式を使用したテーブル参照がサポートされています。

schema.table

必須のテーブル参照コンポーネントは table のみです。スキーマを省略すると、TSQL では既定のスキーマ名が使用されます。

その他の形式の Transact-SQL テーブル参照では、ドットで区切られた最大 4 つのコンポーネント (server.database.owner.table) を使用できます。Transact-SQL でのテーブル参照の処理方法を以下に示します。

  • server. コンポーネントは無視されます (存在する場合)。

  • database. コンポーネントが存在し、owner. コンポーネントが省略されている場合、databaseschema 名にマップされます。したがって、database..tableschema.table にマップされます。データベース名が 'master' である場合、この変換は実行されません。

  • owner. コンポーネントが存在する場合、schema 名にマップされます。

名前変換のため、トランザクションの実行中はフィールド名からフィールド接尾語がいったん削除され、後で元に戻されます。

一時テーブル

InterSystems TSQL は #tablename 一時テーブルをサポートしています。#tablename 一時テーブルは現在のプロセスの現在のプロシージャから参照できます。また、現在のプロシージャから呼び出された任意のプロシージャからも参照できます。#tablename 構文は、TSQL プロシージャ (TSQL 言語でプロシージャとして投影されるクラス・メソッド) でのみサポートされます。

一時テーブルは、CREATE TABLE で、"#" で始まるテーブル名を使用して定義します。一時テーブルは実行時に作成されます。プロシージャを終了すると、#tablename テーブル定義は範囲外になります。接続が切断されると、すべての一時テーブルの定義は範囲外になります。DROP TABLE を使用して一時テーブルを明示的に削除することもできます。

ただし、一時テーブルがアクティブな結果セットで参照される場合、その一時テーブルはプロセスから参照できなくなる可能性がありますが、データおよび定義は結果セットが範囲外になるまで保持されます。

#tablename 一時テーブルは、作成プロシージャと、そのプロシージャが呼び出す任意のプロシージャの両方から参照できます。一時テーブルは、入れ子にされたプロシージャの呼び出しで参照できます。呼び出し先のプロシージャで一時テーブルを宣言する必要はありません。呼び出し先のプロシージャでも同じ名前の一時テーブルを作成する場合は、最後に作成されたテーブル定義が使用されます。一時テーブルは ObjectScript ローカル変数を使用して定義されるので、そのテーブルの作成、変更、および削除はジャーナルされるトランザクション・イベントではありません。トランザクションをロールバックしても、これらの操作に影響しません。

システム・テーブル

システム・テーブルは、InterSystems IRIS ネームスペース単位で存在します。

Systypes

部分的にサポートしています。

トランザクション

BEGIN TRANCOMMIT、および ROLLBACK のコマンドに対して生成されたコードは明示的なトランザクション・モードを使用しますが、次のトランザクション TSQL では通常、BEGIN TRAN 文の前にアクティブであったモードをリストアします。TSQL では、プロシージャが終了したとき、または COMMIT コマンドまたは ROLLBACK コマンドが発行されたときのモードをリストアします。

カーソル名の管理

実行時に 1 つのバージョンのカーソルのみが開いていれば、同じカーソルを複数回宣言することができます。あるストアド・プロシージャで同じカーソルが複数宣言された場合、最初の宣言以外は、名前変更されたカーソルと関連付けられます。OPENFETCHCLOSE、および DEALLOCATE の文は、該当するカーソルの最後の DECLARE を参照することを前提としています。ストアド・プロシージャに含まれる文の字句の位置は、カーソル名と DECLARE とを対応付けるために使用されます。つまり、そのコードのランタイム・パスは考慮されないので注意してください。

クエリ内のカーソルは、InterSystems SQL クエリで使用するスキームの拡張子を使用して名前が付けられます。例えば、以下のようになります。

DECLARE C CURSOR FOR SELECT A FROM B
--
OPEN C
FETCH C
CLOSE C
DEALLOCATE C
--
DECLARE C CURSOR FOR SELECT D FROM E
--
OPEN C
FETCH C
CLOSE C
DEALLOCATE C

これは次のように変換されます。

DECLARE C CURSOR FOR SELECT A FROM B
--
OPEN C
FETCH C
CLOSE C
DEALLOCATE C
--
DECLARE Cv2 CURSOR FOR SELECT D FROM E
--
OPEN Cv2
FETCH Cv2
CLOSE Cv2
DEALLOCATE Cv2

SYSOBJECTS 参照

アプリケーションには一般的に、テーブル、ビュー、そのアプリケーション環境で使用するメタデータを作成する設定プロシージャがあります。これらのプロシージャには次のような式があります。

IF EXISTS (SELECT * FROM SYSOBJECTS 
WHERE ID = OBJECT_ID('People'))

この例では、これによってテーブルが存在するかどうかが判断されます。通常は DROP および CREATE 文が続き、テーブルのメタデータが再構築されます。

TSQL プロシージャとトリガは、SYSOBJECTS システム・テーブルを参照できます。InterSystems TSQL は、SYSOBJECTS テーブルの以下の列 (%TSQL.sys.objects クラス・プロパティ) をサポートします。

説明
name オブジェクト名。
id オブジェクト ID。
type オブジェクト型。次の値のいずれかです。K= PRIMARY KEY または UNIQUE 制約、P= ストアド・プロシージャ、RI=FOREIGN KEY 制約、S= システム・テーブル、TR= トリガ、U= ユーザ・テーブル、V= ビュー。
deltrig エントリがテーブルの場合は、削除トリガのオブジェクト ID。エントリがトリガの場合は、テーブルのテーブル ID。
instrig エントリがテーブルの場合は、挿入トリガのオブジェクト ID。
updtrig エントリがテーブルの場合は、更新トリガのオブジェクト ID。
parent_obj 親オブジェクトのオブジェクト ID 番号。例えば、トリガまたは制約の場合はテーブル ID。
schema オブジェクトが存在するスキーマの名前。
parent_obj_name parent_obj のオブジェクト名。parent_obj=0 の場合は、parent_obj_namename と同じです。

SYSOBJECTS テーブルは読み取り専用です。SYSOBJECTS テーブルは、TSQL プロシージャまたはトリガ外部から名前 %TSQL_sys.objects で参照できます。SYSOBJECTS は、複数のネームスペースにマップされるテーブルではサポートされていません。

Note:

InterSystems IRIS には、SYSOBJECTS 参照と同じ操作を実行できる、クラス・オブジェクトの %Dictionary パッケージが用意されています。詳細は、"インターシステムズ・クラス・リファレンス" の %Dictionary パッケージを参照してください。

FeedbackOpens in a new tab