Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Ultra Light データベース管理とリファレンス » Ultra Light データベースの使用 » Ultra Light データベースの操作

 

イベント通知の操作

Ultra Light でイベントと通知がサポートされるようになりました。通知は、イベントが発生したときに送信されるメッセージであり、パラメータに関する追加情報も示されます。Ultra Light にはシステム・イベントがありますが、イベントにはユーザ定義のものもあります。

イベント通知によって、接続間または同じデータベースに接続されているアプリケーション間での調整および通知を行うことができます。通知は、接続のデフォルト・キューまたは明示的に作成および命名されたキューのいずれかで管理されます。イベントの発生時に、通知が登録されたキュー (または接続) に送信されます。

それぞれの接続では、固有の通知キューが管理されます。名前付きのキューは、任意の接続に対して作成できます。

また、この機能では、事前に定義されたシステム・イベントを使用して、テーブルが変更された場合などのデータの変更に対する「トリガ」や同期が行われた場合の通知が提供されます。次のような事前に定義されたイベントがあります。

アプリケーションによるユーザ・イベントの定義やトリガも可能です。

イベントと通知の API は、サポートされている各言語で提供されます。また、API 機能にアクセスするための SQL 関数も提供されています。

イベント
イベント 出現箇所
Commit

コミットの終了時に通知されます。

SyncComplete

同期の終了時に通知されます。

TableModified

テーブルのローが挿入、更新、または削除されたときにトリガされます。イベントに登録された要求によって影響を受けるローの数にかかわらず、要求ごとに 1 つのイベントが通知されます。

object_name パラメータは、モニタするテーブルを指定します。値 "*" は、データベース内のすべてのテーブルを意味します。

table_name 通知パラメータは、変更されたテーブルの名前です。

note_info.event_name = "SyncComplete";
note_info.event_name_len = 12;
note_info.parms_type = ul_ev_note_info::P_NONE;
note_info.event_name = "TableModified";
note_info.event_name_len = 13;
note_info.parms_type = ul_ev_note_info::P_TABLE_NAME;
note_info.parms = table->name->data;
note_info.parms_len = table->name->len;
キューの操作

キューは、作成および破棄することができます。

CreateNotificationQueue は、現在の接続のイベント通知キューを作成します。キュー名は、接続ごとにスコープされるため、別々の接続で同じ名前を持つキューを作成できます。イベント通知が送信されると、データベース内で一致する名前を持つすべてのキューが、個別のインスタンスの通知を受け取ります。名前では大文字と小文字が区別されません。デフォルトのキューは、キューが指定されていない場合に要求に応じて、各接続に対して作成されます。接続に対してその名前がすでに存在する場合や有効でない場合は、エラーが発生して呼び出しが失敗します。

DestroyNotificationQueue は、指定されたイベント通知キューを破棄します。キュー内に未読の通知が残っている場合は、警告が通知されます。未読の通知は破棄されます。接続のデフォルトのイベント・キューが作成されている場合、接続が閉じると破棄されます。

イベントの操作

DeclareEvent は、登録して、トリガできるイベントを宣言します。Ultra Light では、データベースまたは環境での操作によってトリガされるシステム・イベントの一部が事前に定義されています。イベント名は、ユニークにする必要があります。また、イベント名では大文字と小文字が区別されません。イベントが正常に宣言された場合は true、名前がすでに使用されているか、または無効な場合は false を返します。

RegisterForEvent は、イベントの通知を受信するキューを登録します。キュー名が指定されていない場合は、デフォルトの接続キューが暗黙で指定され、必要に応じて作成されます。特定のシステム・イベントでは、そのイベントが適用されるオブジェクト名を指定できます。たとえば、TableModified イベントではテーブル名を指定できます。SendNotification とは異なり、登録された特定のキューのみイベントの通知を受信します。別の接続の同じ名前を持つ他のキューは、明示的に登録されている場合を除き、イベントの通知を受信しません。正常に登録された場合は true、キューまたはイベントが存在しない場合は false を返します。

TriggerEvent は、イベントをトリガし、登録されているすべてのキューに通知を送信します。送信済みのイベント通知の数を返します。パラメータは、name=value; のペアとして指定できます。

通知の操作

SendNotification は、指定された名前と一致する、データベース内のすべてのキュー (現在の接続におけるキューを含む) に通知を送信します。この呼び出しはブロックしません。特別なキュー名の "*" を使用すると、すべてのキューに送信します。送信済み通知の数 (一致するキューの数) を返します。パラメータは、name=value; のペアとして指定できます。

GetNotification は、イベント通知を読み込みます。この呼び出しは、通知が受信されるまで、または指定された待機時間が経過するまでブロックします。待機をキャンセルするには、指定したキューに別の通知を送信するか、CancelGetNotification を使用します。通知を読み込んだら、ReadNotificationParameter を使用して追加のパラメータを取得します。イベントが読み込まれた場合は true、待機期間が終了したか、またはキャンセルされた場合は false を返します。

GetNotificationParameter は、GetNotification で読み込まれたイベント通知の名前付きパラメータを取得します。指定されたキューでの最後に読み込まれた通知のパラメータのみ取得できます。パラメータが見つかった場合は true、見つからなかった場合は false を返します。

CancelGetNotification は、指定された名前と一致する名前を持つすべてのキューで保留中の GetNotification 呼び出しをキャンセルします。影響を受けるキューの数を返します (必ずしも、ブロックされた読み込みの数ではありません)。

その他の考慮事項