表の更新ステータスを *oldstatusに返します。表は、ユーザーID(userTableID)またはシステムID(systemTableID)のいずれかで識別します。userTableIDが0(ゼロ)以外の場合は、systemTableIDが使用されます。両方が0(ゼロ)の場合は、エラーが返されます。
newstatusに値を指定すると、更新ステータスが*newstatusに設定されます。ステータスが0(ゼロ)以外の場合は、systemTableID で指定された表がXLAで使用可能であることを意味します。0(ゼロ)の場合は、表が追跡されないことを意味します。表の更新ステータスへの変更は、すぐに有効になります。
更新が実行された時点で表の更新追跡が有効になっていた場合にのみ、表への更新が追跡されます。このコールは、基礎となる表への更新に対してシリアライズされます。このため、表を更新するトランザクションは、表のステータスが変更される完全前または完全後に実行されます。
ttXlaTableStatusを使用するには、ユーザーは永続モードでブックマークに接続する必要があります。ttXlaTableStatusは、表に対する挿入、更新および削除を、表にサブスクライブしたブックマークにのみレポートします。ttXlaTableStatusは、DDLイベントをすべてのブックマークにレポートします。DDLイベントには、CREATAB、DROPTAB、CREAIND、DROPIND、CREATVIEW、DROPVIEW、CREATSEQ、DROPSEQ、ADDCOLS、DRPCOLS、TRUNCATE、SETTBLIおよびSETCOLIトランザクションが含まれています。
この関数の使用方法については、「更新を監視する表の指定」を参照してください。
SQLRETURN ttXlaTableStatus(ttXlaHandle_h handle,
SQLUBIGINT systemTableID,
SQLUBIGINT userTableID,
out SQLINTEGER *oldstatus,
SQLINTEGER *newstatus)
コールが成功すると、SQL_SUCCESSが返されます。返されない場合は、ttXlaErrorを使用してエラーをレポートします。
次の例では、ttXlaTableByNameまたは他のなんらかの方法を使用して、システム表識別子またはユーザー表識別子が検出されていることを想定しています。
この例では、次の宣言を想定しています。
SQLUBIGINT systemTableID;
SQLUBIGINT userTableID;
SQLINTEGER currentStatus, requestedStatus;
システム表識別子を指定して表のステータスを検出するには、次のコールを実行します。
/* Get system table identifier into systemTableID, then ... */
rc = ttXlaTableStatus(xlahandle, systemTableID, 0,
¤tStatus, NULL);
currentStatusの値は、表の更新追跡が有効になっている場合は0(ゼロ)以外になり、そうでない場合は0(ゼロ)になります。
システム表識別子を指定して表の更新追跡を有効にするには、次のように、リクエストするステータスを1に設定します。
requestedStatus = 1;
rc = ttXlaTableStatus(xlahandle, systemTableID, 0,
NULL, &requestedStatus);
新しい更新追跡ステータスを設定し、1回のコールで現在のステータスを取得できます。次に例を示します。
requestedStatus = 1;
rc = ttXlaTableStatus(xlahandle, systemTableID, 0,
¤tStatus, &requestedStatus);
前述のコールでは、システム表識別子による表の更新追跡が有効になり、以前の更新追跡ステータスが変数currentStatusに取得されます。
これらのすべての例は、ユーザー表識別子を使用しても実行できます。ユーザー表識別子によって表の更新追跡ステータスを取得するには、次のコールを実行します。
/* Get system table identifier into userTableID, then ... */
rc = ttXlaTableStatus(xlahandle, 0, userTableID,
¤tStatus, NULL);