リモートユーザが新しい顧客を追加すると、プライマリキーがリモートユーザの使用可能なプライマリキーのプールから取り出されます。
前提条件
事前にプライマリキープールテーブルが作成されている必要があります。
営業担当者が Customers テーブルに新しく顧客を追加する場合、挿入するプライマリキー値は、ストアドプロシージャを使用して取得します。次の例では、プライマリキー値を提供するストアドプロシージャと、挿入を実行するストアドプロシージャを使用します。
リモートデータベース上で実行するプロシージャを作成して、プライマリキープールテーブルからプライマリキーを取得します。
たとえば、NewKey プロシージャは、キープールにある整数値を提供し、プールからその値を削除します。
CREATE PROCEDURE NewKey( IN @table_name VARCHAR(40), OUT @value INTEGER ) BEGIN DECLARE NumValues INTEGER; SELECT COUNT(*), MIN(value) INTO NumValues, @value FROM KeyPool WHERE table_name = @table_name AND location = CURRENT PUBLISHER; IF NumValues > 1 THEN DELETE FROM KeyPool WHERE table_name = @table_name AND value = @value; ELSE // Never take the last value, because // ReplenishPool will not work. // The key pool should be kept large enough // that this never happens. SET @value = NULL; END IF; END; |
NewKey プロシージャは、営業担当者の識別子がリモートデータベースの CURRENT PUBLISHER であることを利用します。
リモートデータベース上で実行するプロシージャを作成して、サブスクライブされたテーブルに新しいローを挿入します。
たとえば、NewCustomers プロシージャは、プライマリキーを構成する NewKey が取得した値を使用して、テーブルに新しい顧客を挿入します。
CREATE PROCEDURE NewCustomers( IN customer_name CHAR( 40 ) ) BEGIN DECLARE new_cust_key INTEGER ; CALL NewKey( 'Customers', new_cust_key ); INSERT INTO Customers ( cust_key, name, location ) VALUES ( 'Customers ' || CONVERT (CHAR(3), new_cust_key), customer_name, CURRENT PUBLISHER ); END |
NewKey から取得される new_cust_key 値をテストしてこの値が NULL でないことを確認し、値が NULL の場合には挿入しないように、プロシージャを強化できます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |