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?

クラスへの SQL トリガと外部キーの追加

Caché のすべての永続クラスは、SQL テーブルとして自動的に投影されます。この章では、SQL の振る舞いを制御するクラス定義の部分を、スタジオで操作する方法について説明します。

SQL エイリアス

クラスや大部分のクラス・メンバに、SQL での使用に対して異なる名前を与えることができます。これは、以下のような理由により便利です。

  • SQL には、識別子として使用できない多数の予約語があるため。

  • Caché では、クラス名やクラス・メンバ名に下線文字がサポートされていないため。

クラスに対する SQL テーブル名を指定するには、クラス・インスペクタでクラス情報を表示し、SqlTableName キーワードの値を編集します。

クラス・メンバに対する SQL 名を指定するには、クラス・インスペクタで希望のプロパティを選択し、対応する SQL 名キーワードの値を編集します (プロパティには SqlFieldName、インデックスには SqlName など)。

SQL ストアド・プロシージャ

SQL ストアド・プロシージャは、Caché メソッドやクラス・クエリで、ストアド・プロシージャとして ODBC や JDBC クライアントによって呼び出されます。

Caché は、クラス・クエリを基にして結果セットを返すものと、クラス・メソッドを基にして結果セットを返さないものの、2 つの SQL ストアド・プロシージャのタイプをサポートしています。

クエリ・ベースのストアド・プロシージャ

結果セットを返す SQL ストアド・プロシージャを作成するには、クラス定義にクエリ定義を追加し、クエリの SqlProc キーワードを True に設定します。以下の操作を行います。

  1. [クラス]→[追加]→[クエリ] を選択して新規クエリ・ウィザードを使用し、クラス定義内にクエリを作成します。

  2. クラス・インスペクタを使用して、クエリ定義キーワード 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 に設定します。以下の操作を行います。

  1. 新規メソッド・ウィザードを使用して、クラス定義内にクラス・メソッドを作成します。

  2. クラス・インスペクタを使用して、メソッドのキーワード 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 オブジェクトのインスタンスであることに注意してください。詳細は、"Caché SQL の使用法" の "ストアド・プロシージャの定義と使用" の章を参照してください。

CALL 文を使用して、このストアド・プロシージャを ODBC クライアントから呼び出すことができます。

CALL Employee_Authenticate('Elvis')

このストアド・プロシージャを JDBC クライアントから呼び出すには、以下のコードを使用します。

prepareCall("{? = call Employee_Authenticate(?)}")

クラスへの SQL トリガの追加

SQL トリガは、特定のイベントに応答して、SQL エンジンによって起動されるコードです。

SQL トリガは、オブジェクトの永続性が保持されている間は起動されません (%CacheSQLStorageOpens in a new tab ストレージ・クラスを使用していない場合)。

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 外部キー・ウィザードを開くには、[クラス]→[追加]→[外部キー] を使用します。または、クラス・インスペクタで右クリックして [新規外部キー] を選択するか、ツールバーから [新規外部キー] アイコン generated description: newforeignkeyicon を選択することもできます。

新規 SQL 外部キー・ウィザードでは、情報の入力が促されます。必要な情報をすべて入力したら、[完了] ボタンを選択します。指定していない情報には既定値が設定されます。

名前および説明ページ

新規 SQL 外部キー・ウィザードでは、以下の情報の入力が必要です (これらの値は後で変更できます)。

外部キー名

(必須) 外部キーの名前。これは、有効な外部キー名である必要があります。また、定義済みの既存の外部キーと同じ名前を付けることはできません。

名前の概要は、“Caché オブジェクトの使用法” の “Caché クラス” の章を参照してください。

説明

(オプション) 新規外部キーに関する説明。この説明は、クラス・ドキュメントがオンライン・クラス・ライブラリ・ドキュメントで表示されるときに使用されます。

説明には、HTML フォーマット・タグを記述することもできます。詳細は、"Caché オブジェクトの使用法" の “クラスの定義とコンパイル” の章の “クラス・ドキュメントでの HTML マークアップの使用” を参照してください。

属性ページ

2 番目のページで、外部キーによって制約するクラスの 1 つ以上のプロパティを選択します。

キー構成ページ

3 番目のページで、外部キー・プロパティの制約に使用する値を指定する、クラスとクラス内のキー (一意のインデックス) の両方を選択します。

新規 SQL 外部キー・ウィザード実行の結果

新規 SQL 外部キー・ウィザードの実行後、クラス・エディタ・ウィンドウは更新され、新規の外部キー定義が表示されます。

この外部キーをさらに変更する場合は、クラス・エディタ、またはクラス・インスペクタを使用します。

FeedbackOpens in a new tab