TSQL システム・ストアド・プロシージャ
InterSystems IRIS® データ・プラットフォームには、システム内のデータベース・オブジェクトの管理と追跡に役立つ TSQL システム・ストアド・プロシージャが用意されています。TSQL システム・ストアド・プロシージャは、任意のネームスペースやスキーマで実行できます。すべてのストアド・プロシージャのスコープは現在のネームスペースです。
ストアド・プロシージャを実行するには、TSQL の EXECUTE コマンドまたは EXEC コマンドを使用します。sp_xxx のような名前のストアド・プロシージャの場合、この execute コマンドは明示的または暗黙的にすることができます。したがって、以下の TSQL 文は機能的に同じです。
EXECUTE sp_addtype 'shortstr','varchar(6)','not null'
EXEC sp_addtype 'shortstr','varchar(6)','not null'
sp_addtype 'shortstr','varchar(6)','not null'
InterSystems TSQL では、以下のシステム・ストアド・プロシージャがサポートされています。
sp_addtype
このシステム・ストアド・プロシージャは、ユーザ定義データ型を追加します。
sp_addtype typename, phystype [(length) | (precision [, scale])]
[, "identity" | nulltype]
typename は、ユーザ定義データ型の名前です。phystype は、ユーザ定義データ型の基になる物理データ型です。オプションで、IDENTITY または nulltype を指定できます。オプションの IDENTITY キーワードは、ユーザ定義データ型に IDENTITY プロパティがあることを指定します。このプロパティは定義上、NOT NULL です。オプションの nulltype は、このデータ型の列に NOT NULL 制約が必要かどうかを指定します。オプションは、NULL (NULL を許可する) と NOT NULL または NONULL (NULL を許可しない) です。
typename は、テーブル列にのみ使用できます。typename は、現在のネームスペース内で定義されます。複数のネームスペースにわたる typename のマッピングはサポートされていません。
SQL コンパイラは、システム構成の DDL データ型マッピング定義で型マッピングを検索してから、typename テーブルで検索します。したがって、sp_addtype を使用して My_Type という名前の typename を定義しても、ユーザ定義の DDL データ型マッピングでも My_Type を定義している場合は、ユーザ定義の DDL データ型マッピング定義から My_Type のマッピングが取得されます。
この typename の検索は実行時に行われるので、DDL のコンパイル時に typename を定義する必要はありません。
sp_addtype を、指定した nulltype と共に使用して定義したデータ型の動作は以下のようになります。
-
DDL フィールドに NULL を指定した場合、sp_addtype で NOT NULL が指定されていても、フィールドの値は必須ではありません。
-
DDL フィールドに NOT NULL を指定した場合、sp_addtype で NULL が指定されていても、フィールドの値は必須です。
-
DDL フィールドに NULL または NOT NULL を指定していない場合、sp_addtype で NOT NULL が指定されていても、フィールドの値は必須です。
-
DDL フィールドに NULL または NOT NULL を指定していない場合、sp_addtype で NOT NULL が指定されているか、または nulltype が指定されていなくても、フィールドの値は必須ではありません。
以下の例では、データ型 shortstr を作成します。このデータ型には値が必要であり (NOT NULL)、この値は 6 文字以下でなければなりません。
EXEC sp_addtype 'shortstr','varchar(6)','not null'
sp_droptype
このシステム・ストアド・プロシージャは、ユーザ定義データ型を削除します。
sp_droptype typename
typename は、現在のネームスペース内で定義されているユーザ定義データ型の名前です。
"sp_addtype" を参照してください。
sp_procxmode (Sybase のみ)
このシステム・ストアド・プロシージャは、ストアド・プロシージャに関連付けられている実行モードを表示または変更します。
sp_procxmode [procname [, tranmode]]
procname は、ストアド・プロシージャの名前です。tranmode は、トランザクション実行モードです。値は、"chained"、"unchained" (既定値)、および "anymode" です。
引数を指定せずに呼び出された場合、sp_procxmode は、ネームスペースに対して定義されているすべてのプロシージャ、それらのユーザ名およびトランザクション・モード (1=unchained) で構成される結果セットを返します。procname 引数のみを指定して呼び出された場合、sp_procxmode は、指定されたプロシージャのユーザ名とトランザクション・モードを返します。
以下の tranmode 値がサポートされています。
-
chained : データ取得文またはデータ変更文 (delete、insert、open、fetch、select、または update) の前にトランザクションを暗黙的に開始します。この場合でも、commit transaction または rollback transaction を使用して、トランザクションを明示的に終了する必要があります。chained モードで実行するように定義されたプロシージャは、プロシージャの開始時に autocommit_off を設定し、プロシージャの終了時に以前の設定をリストアします。
-
unchained : (既定値) データ取得文またはデータ変更文の前にユーザがトランザクションを明示的に開始する必要があります。commit transaction または rollback transaction を使用して、トランザクションを明示的に終了する必要があります。unchained モードで実行するように定義されたプロシージャは、プロシージャの開始時に autocommit_on を設定し、プロシージャの終了時に以前の設定をリストアします。
-
anymode : モードが定義されていない場合、または anymode として定義された場合、自動コミット設定は変更されません。
InterSystems IRIS では、プロセス設定を変更する SET [UN]CHAINED オプションはサポートされていません。使用される設定は、プロセスの自動コミット・モードの現在の設定です。
chained として定義されたプロシージャが autocommit_on モードのプロセスによって呼び出された場合、InterSystems IRIS はエラーを報告しません。また、unchained として定義されたプロシージャが autocommit_off モードのプロセスによって呼び出された場合もエラーを報告しません。
tranmode メタデータは、実際のメソッド定義の一部ではありません。つまり、tranmode を変更してもリコンパイルの必要はありません。また、TSQL (Sybase) ストアド・プロシージャを含むクラスをエクスポート/インポートしたときに、プロシージャの tranmode 設定がクラス定義と共にエクスポートされることはありません。インポート時に、プロシージャを chained モードで定義する必要がある場合は、プロシージャについて EXEC sp_procxmode 'procname', 'chained' を呼び出す必要があります。