Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (Deutsch) » SQL Remote » SQL Remote-Systeme erstellen » Mehrfach vorhandene Primärschlüssel » Primärschlüsselpools verwenden

 

Primärschlüssel aus dem Schlüsselpool verwenden

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.

 ♦  So verwenden Sie Primärschlüssel (SQL)
  1. 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.

  2. 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.