Wenn ein Handelsvertreter einen neuen Kunden der Customers-Tabelle hinzufügt, wird der einzufügende Primärschlüsselwert mittels einer gespeicherten Prozedur ermittelt. Dieses Beispiel verwendet eine gespeicherte Prozedur, die den Primärschlüsselwert liefert. Auch das Einfügen erfolgt mithilfe einer gespeicherten Prozedur.
Erstellen Sie eine Prozedur zur Ausführung auf den entfernten Datenbanken, um einen Primärschlüssel von der Primärschlüsselpool-Tabelle zu erhalten.
Beispiel: Die NewKey-Prozedur liefert einen Ganzzahlwert vom Primärschlüsselpool und löscht den Wert aus dem Pool.
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; |
Die NewKey-Prozedur nützt den Umstand, dass der "Sales Representative"-Bezeichner der aktuelle Publikationseigentümer (CURRENT PUBLISHER) der entfernten Datenbank ist.
Erstellen Sie eine Prozedur, die in den entfernten Datenbanken ausgeführt wird, um eine neue Zeile in eine subskribierte Tabelle einzufügen.
Beispiel: Die NewCustomers-Prozedur fügt einen neuen Kunden in die Tabelle ein, wobei der von NewKey gelieferte Wert verwendet wird, um den Primärschlüssel zu ermitteln.
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 |
Sie können diese Prozedur erweitern, indem Sie den new_cust_key-Wert, der von NewKey geliefert wird, testen, um zu überprüfen, ob er NULL ist, und ein Einfügen zu verhindern, falls dies zutrifft.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |