リモートユーザーが新しい顧客を追加するたびに、そのリモートユーザーが使用できるプライマリキーのプールは 1 つずつ減少します。統合データベースのプライマリキープールテーブルの内容は定期的に補充して、リモートデータベースに新しいプライマリキーをレプリケートする必要があります。
統合データベースで、プライマリキープールを値で埋めるためのプロシージャーを作成します。
トリガーアクションはレプリケートされないため、キープールの補充にはトリガーを使用できません。
次に例を示します。
CREATE PROCEDURE ReplenishPool() BEGIN FOR EachTable AS TableCursor CURSOR FOR SELECT table_name AS CurrTable, max(value) as MaxValue FROM KeyPool GROUP BY table_name DO FOR EachRep AS RepCursor CURSOR FOR SELECT location AS CurrRep, COUNT(*) AS NumValues FROM KeyPool WHERE table_name = CurrTable GROUP BY location DO // make sure there are 100 values. // Fit the top-up value to your // requirements WHILE NumValues < 100 LOOP SET MaxValue = MaxValue + 1; SET NumValues = NumValues + 1; INSERT INTO KeyPool (table_name, location, value) VALUES (CurrTable, CurrRep, MaxValue); END LOOP; END FOR; END FOR; END; |
各ユーザーのプライマリキープールにプライマリキーの初期値を挿入します。
ReplenishPool プロシージャーには、各サブスクライバーに対して少なくとも 1 つのプライマリキー値が必要です。これによって、最大値を検索し、値を追加して次のセットを生成できます。
はじめにプールを値で埋めるには、各ユーザーに対して値を 1 つ挿入してから、ReplenishPool を呼び出して残りを埋めます。次の例では、3 人のリモートユーザーと単一の統合ユーザー Office について示します。
INSERT INTO KeyPool VALUES( 'Customers', 40, 'user1' ); INSERT INTO KeyPool VALUES( 'Customers', 41, 'user2' ); INSERT INTO KeyPool VALUES( 'Customers', 42, 'user3' ); INSERT INTO KeyPool VALUES( 'Customers', 43, 'Office'); CALL ReplenishPool(); |
ReplenishPool プロシージャーによって、各ユーザーのプールの値が 100 個まで増えます。指定する値は、ユーザーがデータベースのテーブルにローを挿入する頻度によって異なります。
定期的に ReplenishPool を実行します。
キープールテーブルのプライマリキー値のプールを再補充するため、ReplenishPool プロシージャーを統合データベースで定期的に実行してください。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |