Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Caché TSQL 構文

一般的に使用される構文

テーブル参照

Caché TSQL は、次の Caché SQL 形式を使用したテーブル参照をサポートしています。

schema.table

必須のテーブル参照コンポーネントは table のみです。

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

  • server 接頭語は無視されます (存在する場合)。

  • database 接頭語は削除されます (存在する場合)。Caché では、master という名前のデータベースのみをサポートします。

  • user 接頭語は schema 名にマップされます (存在する場合)。

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

一時テーブル

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

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

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

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

トランザクション

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

カーソル名の管理

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

クエリ内のカーソルは、Caché 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

システムのストアド・プロシージャ

sp_addtype

以下の制限事項付きでサポートされています。

  • 引用符なしの名前はサポートされません。例えば EXEC sp_addtype ssn,… は使用できません。EXEC sp_addtype 'ssn',… を使用する必要があります。

  • 物理型にスペースを使用できません。

  • 物理型は検証でのみ使用できます。

システム・テーブル

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

Systypes

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

SYSOBJECTS 参照

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

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

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

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

nameOpens in a new tab オブジェクト名。
idOpens in a new tab オブジェクト ID。
typeOpens in a new tab オブジェクト型。次の値のいずれかです。K= PRIMARY KEY または UNIQUE 制約、P= ストアド・プロシージャ、RI=FOREIGN KEY 制約、S= システム・テーブル、TR= トリガ、U= ユーザ・テーブル、V= ビュー。
deltrigOpens in a new tab エントリがテーブルの場合は、削除トリガのオブジェクト ID。エントリがトリガの場合は、テーブルのテーブル ID。
instrigOpens in a new tab エントリがテーブルの場合は、挿入トリガのオブジェクト ID。
updtrigOpens in a new tab エントリがテーブルの場合は、更新トリガのオブジェクト ID。
parent_objOpens in a new tab 親オブジェクトのオブジェクト ID 番号。たとえば、トリガまたは制約の場合はテーブル ID。
schemaOpens in a new tab オブジェクトが存在するスキーマの名前。
parent_obj_nameOpens in a new tab parent_obj のオブジェクト名。parent_obj=0 の場合は、parent_obj_namename と同じです。

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

Note:

Caché では、クラス・オブジェクトの %Dictionary パッケージで、SYSOBJECTS 参照と同じ操作を実行できることが実証されています。詳細は、"InterSystems Class Reference" の %Dictionary パッケージを参照してください。

FeedbackOpens in a new tab