クラスへの SQL トリガと外部キーの追加
InterSystems IRIS® のすべての永続クラスは、SQL テーブルとして自動的に投影されます。ここでは、SQL の振る舞いを制御するクラス定義の部分を、スタジオで操作する方法について説明します。
"トリガの使用法" および "外部キーの使用法" も参照してください。詳細は、"クラス定義リファレンス" の "トリガ定義" および "外部キー定義" を参照してください。
SQL エイリアス
クラスや大部分のクラス・メンバに、SQL での使用に対して異なる名前を与えることができます。これは、以下のような理由により便利です。
-
SQL には、識別子として使用できない多数の予約語があるため。
-
InterSystems IRIS では、クラス名やクラス・メンバ名に下線文字がサポートされていないため。
クラスに対する SQL テーブル名を指定するには、クラス・インスペクタでクラス情報を表示し、SqlTableName キーワードの値を編集します。
クラス・メンバに対する SQL 名を指定するには、クラス・インスペクタで希望のプロパティを選択し、対応する SQL 名キーワードの値を編集します (プロパティには SqlFieldName、インデックスには SqlName など)。
SQL ストアド・プロシージャ
SQL ストアド・プロシージャは、InterSystems IRIS メソッドやクラス・クエリで、ストアド・プロシージャとして ODBC や JDBC クライアントによって呼び出すことができます。
InterSystems IRIS は、2 つのスタイルの SQL ストアド・プロシージャをサポートしています。
-
クラス・クエリに基づくプロシージャ。
-
クラス・メソッドに基づいて結果セットを返さないプロシージャ。
クエリ・ベースのストアド・プロシージャ
結果セットを返す SQL ストアド・プロシージャを作成するには、クラス定義にクエリ定義を追加し、クエリの SqlProc キーワードを True に設定します。以下の操作を行います。
-
[クラス]→[追加]→[クエリ] を選択して新規クエリ・ウィザードを開きます。
-
このウィザードを完了して、新規クエリをクラス定義に追加します。
-
クラス・インスペクタを使用して、クエリ定義キーワード SqlProc の値を True に設定します。
この結果は、以下のようになります。
Class Employee Extends %Persistent
{
/// A class query listing employees by name.
Query ListEmployees() As %SQLQuery(CONTAINID = "1") [SqlProc]
{
SELECT ID,Name
FROM Employee
ORDER BY Name
}
}
CALL 文を使用して、このストアド・プロシージャを ODBC、または JDBC クライアントから呼び出すことができます。
CALL Employee_ListEmployees()
この呼び出しの後、ODBC アプリケーション、または JDBC アプリケーションは、クラス・クエリから返された結果セットのコンテンツをフェッチできます。
この方法は、カスタム記述コードを基にしたクエリ定義でも使用できます。SQL 文のみを基にしたストアド・プロシージャの定義に限定されません。
メソッド・ベースのストアド・プロシージャの作成
結果セットを返さない SQL ストアド・プロシージャを作成するには、クラス定義にクエリ・メソッドを追加し、メソッドの SqlProc キーワードを True に設定します。以下の操作を行います。
-
新規メソッド・ウィザードを使用して、クラス定義内にクラス・メソッドを作成します。
-
クラス・インスペクタを使用して、メソッドのキーワード SqlProc の値を True に設定します。
この結果は、以下のようになります。
Class Employee Extends %Persistent
{
ClassMethod Authenticate(
ctx As %SQLProcContext,
name As %String,
ByRef approval As %Integer
) [SqlProc]
{
// ...
Quit
}
}
SQL ストアド・プロシージャとして使用されたメソッドの最初の引数は、%SQLProcContextOpens in a new tab オブジェクトのインスタンスであることに注意してください。詳細は、"ストアド・プロシージャの定義と使用" を参照してください。
CALL 文を使用して、このストアド・プロシージャを ODBC クライアントから呼び出すことができます。
CALL Employee_Authenticate('Elvis')
このストアド・プロシージャを JDBC クライアントから呼び出すには、以下のコードを使用します。
prepareCall("{? = call Employee_Authenticate(?)}")
クラスへの SQL トリガの追加
SQL トリガは、特定のイベントに応答して、SQL エンジンによって起動されるコードです。
SQL トリガは、オブジェクトの永続性が保持されている間は起動されません (%Storage.SQL ストレージ・クラスを使用していない場合)。
SQL トリガをクラス定義に追加するには、以下の 2 つの方法があります。
-
クラス・エディタを使用して、クラス定義の値を編集する方法
-
新規 SQL トリガ・ウィザードを使用する方法
クラス・エディタを使用して SQL トリガを追加するには、クラス・エディタの空の行にカーソルを置き、次のようにトリガ宣言を入力します。
Class MyApp.Company Extends %Persistent
{
/// This trigger updates the Log table for every insert
Trigger LogEvent [ Event = INSERT ]
{
// ...
}
}
新規 SQL トリガ・ウィザード
新規 SQL トリガ・ウィザード を使用して、新規の SQL トリガを作成できます。新規 SQL トリガ・ウィザードを開くには、[クラス]→[追加]→[SQLトリガ] を使用します。または、クラス・インスペクタで右クリックし、[追加]→[新規 SQL トリガ] を選択します。
新規 SQL トリガ・ウィザードで、情報の入力が促されます。[完了] ボタンはいつでも選択できます。指定していない情報に対しては既定値が設定されます。
名前および説明ページ
新規 SQL トリガ・ウィザードでは、以下の情報に関する入力が促されます (これらの値は後で変更できます)。
(必須) トリガの名前。これは、有効なトリガ名である必要があります。また、定義済みの既存のトリガと同じ名前を付けることはできません。
"識別子のルールとガイドライン" を参照してください。
(オプション) 新規トリガに関する説明。この説明は、クラス・ドキュメントがオンライン・クラス・ライブラリ・ドキュメントで表示されるときに使用されます。
トリガ・イベント・ページ
新規の SQL トリガ・ウィザードでは、イベントやトリガのタイミングを指定して、いつ新規のトリガを起動するかを示します。
トリガが起動される SQL イベントを指定します。選択肢は、[挿入] (新規の行が挿入されるとき)、[更新] (行が更新されるとき)、または [削除] (行が削除されるとき) です。
いつトリガが起動されるかを指定します。選択肢は、イベントが発生する前、または後です。
トリガ・コード
新規 SQL トリガ・ウィザードでは、トリガに対するソース・コードを入力できます (必要な場合)。
新規 SQL トリガ・ウィザード実行の結果
新規 SQL トリガ・ウィザードの実行後、クラス・エディタは更新されて、新規のトリガ定義が表示されます。
このトリガは、クラス・エディタとクラス・インスペクタのどちらを使用しても編集できます。
クラスへの新規 SQL 外部キーの追加
SQL 外部キーは、テーブル内の 1 つまたは複数のフィールドと、他のテーブルのキー (一意のインデックス) 間の整合性制約を定義します。
一般的に、オブジェクト・アプリケーションでは外部キーを使用しません。その代わり、オブジェクト・ベースでの操作に優れたリレーションシップを使用します。リレーションシップは、手動で定義する外部キー定義と同等の整合性制約を (SQL とオブジェクト・アクセスの両方に) 自動的に適用します。
アプリケーションでは、通常、本質的にリレーショナルなアプリケーションの外部キー定義を使用します。
SQL 外部キーをクラス定義に追加するには、以下の 2 つの方法があります。
-
クラス・エディタを使用して、クラス定義の値を編集する方法
-
新規 SQL 外部キー・ウィザードを使用する方法
クラス・エディタを使用して SQL 外部キーを追加するには、クラス・エディタの空の行にカーソルを置き、次のように外部キー宣言を入力します。
Class MyApp.Company Extends %Persistent
{
Property State As %String;
ForeignKey StateFKey(State) References StateTable(StateKey);
}
新規 SQL 外部キー・ウィザード
新規 SQL 外部キー・ウィザードを開くには、[クラス]→[追加]→[外部キー] を使用します。または、クラス・インスペクタで右クリックして、[追加]→[新規外部キー] を選択することもできます。ツールバーの [新規外部キー] ボタン をクリックすることもできます。
新規 SQL 外部キー・ウィザードでは、情報の入力が促されます。必要な情報をすべて入力したら、[完了] ボタンを選択します。指定していない情報には既定値が設定されます。
名前および説明ページ
新規 SQL 外部キー・ウィザードでは、以下の情報の入力が必要です (これらの値は後で変更できます)。
(必須) 外部キーの名前。これは、有効な外部キー名である必要があります。また、定義済みの既存の外部キーと同じ名前を付けることはできません。
"識別子のルールとガイドライン" を参照してください。
(オプション) 新規外部キーに関する説明。この説明は、クラス・ドキュメントがオンライン・クラス・ライブラリ・ドキュメントで表示されるときに使用されます。
説明には、HTML フォーマット・タグを記述することもできます。"クラスの定義と使用" の "クラス・ドキュメントの作成" を参照してください。
属性ページ
ウィザードの 2 番目のページで、外部キーによって制約するクラスの 1 つ以上のプロパティを選択します。
キー構成ページ
ウィザードの 3 番目のページで、外部キー・プロパティの制約に使用する値を指定する、クラスとクラス内のキー (一意のインデックス) の両方を選択します。
新規 SQL 外部キー・ウィザード実行の結果
新規 SQL 外部キー・ウィザードの実行後、クラス・エディタは更新され、新規の外部キー定義が表示されます。
この外部キーの変更は、クラス・エディタとクラス・インスペクタのどちらを使用しても行えます。