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

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' を呼び出す必要があります。

FeedbackOpens in a new tab