33 SDO_TRKRパッケージ(位置追跡)

MDSYS.SDO_TRKRパッケージには、位置追跡サーバーを使用するためのサブプログラムが含まれています。

これらのサブプログラムを使用するには、「位置追跡サーバー」に記載の概念と技術について理解する必要があります。

33.1 SDO_TRKR.CREATE_TRACKING_SET

構文

SDO_TRKR.CREATE_TRACKING_SET(
  tracking_set_name  IN VARCHAR2,
  num_trkr_queues    IN NUMBER(38) DEFAULT 4,
  num_loc_queues     IN NUMBER(38) DEFAULT 1);

説明

位置追跡サーバーに必要な追跡セット、具体的には表およびキューを作成します。

パラメータ

tracking_set_name

追跡セットの名前。

num_trkr_queues

追跡メッセージを管理するために作成するキューの数。このパラメータに対するデフォルト値は4です。追跡地域表内の地域数が多い場合、トラッカ・キューを多くするとパフォーマンスが向上することがあります。作成されたトラッカ・キューごとにスケジューラ・ジョブも作成されるため、トラッカ・キューの数はシステム・リソースとバランスをとる必要もあります。

num_loc_queues

位置メッセージを管理するために作成するキューの数。このパラメータのデフォルト値は1です。追跡されるオブジェクト数が多い場合、位置キューを多くするとパフォーマンスが向上することがあります。作成された位置キューごとにスケジューラ・ジョブも作成されるため、位置キューの数はシステム・リソースとバランスをとる必要もあります。

使用上のノート

このプロシージャでは、位置追跡サーバーに必要な表およびキューを作成します。これは、位置追跡サーバーを有効にするために必要な最初のステップです。

位置追跡サーバーの概念および使用方法については、「位置追跡サーバー」を参照してください。

次の例では、8個の追跡キューと8個の位置キューを持つTRACKING_EXAMPLEという名前の追跡ネットワークを作成します。

EXECUTE SDO_TRKR.CREATE_TRACKING_SET('TRACKING_EXAMPLE', 8, 8);

33.2 SDO_TRKR.DROP_TRACKING_SET

構文

SDO_TRKR.DROP_TRACKING_SET(
   tracking_set_name  IN VARCHAR2);

説明

追跡セットを削除します。これは、位置追跡サーバーに必要な表、キューおよびジョブを削除します。

パラメータ

tracking_set_name

追跡セットの名前。

使用上のノート

このプロシージャは、以前にSDO_TRKR.CREATE_TRACKING_SETプロシージャをコールして作成した追跡セットを削除します。

位置追跡サーバーの概念および使用方法については、「位置追跡サーバー」を参照してください。

次の例では、以前に作成した追跡セットを削除します。

EXECUTE SDO_TRKR.DROP_TRACKING_SET('TRACKING_EXAMPLE');

33.3 SDO_TRKR.GET_NOTIFICATION_MSG

構文

SDO_TRKR.GET_NOTIFICATION_MSG(
   tracking_set_name IN VARCHAR2,
   deq_wait          IN NUMBER(38) DEFAULT DBMS_AQ.NO_WAIT,
   message           OUT NOTIFICATION_MSG);

説明

追跡セット通知キューから次の通知メッセージを取得します。

パラメータ

tracking_set_name

追跡セットの名前。このパラメータは、通知キューの名前を作成するために使用します。

deq_set_wait

検索基準に一致するメッセージがキューに存在しない場合に、メッセージが通知キューに着信するのを待機する秒数。このパラメータのデフォルトはDBMS_AQ.NO_WAITで、操作は待機しないことを意味します。

message

NOTIFICATION_MSG型の出力パラメータ。通知キューの次のメッセージ、または待機時間が失効した場合はnull。

使用上のノート

位置追跡サーバーの概念および使用方法については、「位置追跡サーバー」を参照してください。

次の例では、通知メッセージを追跡セットの通知キューから取得し、メッセージの内容を追跡セットの補助通知表に挿入します。メッセージの着信がないまま30秒間待機するまで、通知メッセージは取得され続けます。

...
 LOOP
   SDO_TRKR.GET_NOTIFICATION_MSG(
     tracking_set_name => 'TRACKING_EXAMPLE', 
     message => message, 
     deq_wait =>30);
   IF (message IS NULL) THEN
     EXIT;
   END IF;
   INSERT INTO tracking_example_notifications (object_id, region_id,
                                               time, x, y, state)
   VALUES (message.object_id, 
           message.region_id, 
           message.time,
           message.x, 
           message.y, 
           message.state);
 END LOOP; 
...  

33.4 SDO_TRKR.SEND_LOCATION_MSGS

構文

SDO_TRKR.SEND_LOCATION_MSGS(
   tracking_set_name IN VARCHAR2,
   location_msgs     IN LOCATION_MSG_ARR );

説明

追跡セット内で追跡されているオブジェクトの新しい位置情報の配列を送信します。

パラメータ

tracking_set_name

追跡セットの名前。

location_msgs

LOCATION_MSG_ARR型のメッセージ。

queue_no

この位置メッセージに使用する特定の位置キュー。このパラメータを指定しないことをお薦めします。この場合、追跡サーバーによってこの位置メッセージの管理に最適なキューが決定されます。

使用上のノート

このプロシージャは、追跡目的で新しい位置メッセージを追加します。追跡対象のオブジェクトの新しい位置が取得されたら、このプロシージャを使用してそのオブジェクトの位置を更新できます。

location_msgsパラメータはLOCATION_MSG_ARR型で、「位置追跡サーバー用のデータ型」に定義があります。

各メッセージにはタイムスタンプ値が含まれ、これは更新時間であり、位置情報とともに保持されます。

位置追跡サーバーの概念および使用方法については、「位置追跡サーバー」を参照してください。

次の例では、新しい位置メッセージを追加します。メッセージには、オブジェクトID (1)、現在の時間、オブジェクトの新しい場所のX座標とY座標(2, 2)が含まれます。

EXECUTE SDO_TRKR.SEND_LOCATION_MSGS('TRACKING_EXAMPLE',  LOCATION_MSG_ARR(location_msg(1, CURRENT_TIMESTAMP(), 2,2)));

33.5 SDO_TRKR.SEND_TRACKING_MSG

構文

SDO_TRKR.SEND_TRACKING_MSG(
   tracking_set_name  IN VARCHAR2,
   tracking_msg  IN TRACKER_MSG );

説明

追跡メッセージを追跡キューに挿入します。追跡対象のオブジェクトごとに1つのTRACKER_MSGが必要です。オブジェクト1が地域1、2、および3で追跡されている場合、オブジェクトID/地域IDペアごとに1つずつ、3つのTRACKER_MSGが必要です。

パラメータ

tracking_set_name

追跡セットの名前。

tracking_msg

TRACKER_MSG型のメッセージ。これは、追跡対象のオブジェクトと、そのオブジェクトが追跡されている1つ以上地域との間に関係を作成するために使用します。

使用上のノート

このプロシージャでは、どのオブジェクトをどの地域内で追跡するかを位置追跡サーバーに指示するトラッカ表に新しい行を作成します。

tracking_msパラメータはTRACKER_MSG型で、「位置追跡サーバー用のデータ型」に定義があります。

位置追跡サーバーの概念および使用方法については、「位置追跡サーバー」を参照してください。

次の例では、IDが8の地域について追跡されるIDが4の新しい追跡オブジェクトをTRACKING_EXAMPLEという名前の追跡セットに挿入します。通知メッセージは、オブジェクトが地域(I)にあるときに送信されます。Oが指定されている場合、通知はオブジェクトが地域にあるときに送信され、Tが指定されている場合、通知はオブジェクトが地域内または地域外に遷移したときにのみ送信されます。

EXECUTE SDO_TRKR.SEND_TRACKING_MSG('TRACKING_EXAMPLE', TRACKER_MSG(4, 8, 'I'));

33.6 SDO_TRKR.START_TRACKING_SET

構文

SDO_TRKR.START_TRACKING_SET(
 tracking_set_name  IN VARCHAR2);

説明

位置追跡サーバー用のキューを起動し、それらのキューをモニターするジョブを起動します。

パラメータ

tracking_set_name

追跡セットの名前。

使用上のノート

このプロシージャは、SDO_TRKR.CREATE_TRACKING_SETプロシージャをコールして以前に作成した追跡セットを起動します。

位置追跡サーバーの概念および使用方法については、「位置追跡サーバー」を参照してください。

次の例では、以前に作成した追跡セットを起動します。

EXECUTE SDO_TRKR.START_TRACKING_SET('TRACKING_EXAMPLE');

33.7 SDO_TRKR.STOP_TRACKING_SET

構文

SDO_TRKR.STOP_TRACKING_REGIONS(
 tracking_set_name  IN VARCHAR2 );

説明

位置追跡サーバー用のキューを停止し、それらのキューをモニターするジョブを停止します。

パラメータ

traxking_set_name

追跡セットの名前。

使用上のノート

このプロシージャは、SDO_TRKR.START_TRACKING_SETプロシージャをコールして以前に起動した追跡ネットワークを停止します。

位置追跡サーバーの概念および使用方法については、「位置追跡サーバー」を参照してください。

次の例では、以前に起動した追跡セットを停止します。

EXECUTE SDO_TRKR.STOP_TRACKING_REGIONS('TRACKING_EXAMPLE');