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

SAP Sybase SQL Anywhere 16.0 (Deutsch) » MobiLink - Clientadministration » SQL Anywhere-Clients für MobiLink » Skriptgesteuerter Upload » Praktische Einführung: Verwenden des skriptgesteuerten Uploads

 

Lektion 3: Umgang mit Einfügungen

Sie müssen gespeicherte Prozeduren und andere Komponenten definieren, um den Upload verarbeiten zu können. Dies geschieht für Einfügungen, Aktualisierungen und Löschungen getrennt.

Voraussetzungen

In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Verwenden des skriptgesteuerten Uploads.

In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Erstellen der konsolidierten Datenbank.

 Aufgabe
  1. Wählen Sie die mit der entfernten Datenbank verbundene Instanz von Interactive SQL und erstellen Sie mithilfe der folgenden SQL-Anweisungen einen Trigger, um den insert_time-Wert für jede Zeile festzulegen, wenn sie eingefügt wird.

    CREATE TRIGGER emp_ins AFTER INSERT ON employee
    REFERENCING NEW AS newrow
    FOR EACH ROW
    BEGIN
        UPDATE employee SET insert_time = CURRENT TIMESTAMP
        WHERE id = newrow.id
    END;

    Dieser Zeitstempel wird verwendet, um festzustellen, ob seit der letzten Synchronisation eine Zeile eingefügt wurde. Dieser Trigger wird nicht ausgelöst, wenn dbmlsync übertragene Einfügungen aus der konsolidierten Datenbank anwendet, da Sie später in diesem Beispiel die erweiterte Option FireTriggers deaktivieren werden. Zeilen, die durch den Download eingefügt werden, erhalten den insert_time-Wert "1900-01-01", also den Standardwert, der bei der Erstellung der Tabelle employee definiert wurde. Dieser Wert sollte immer vor dem Beginn des Verarbeitungsfortschritt liegen, damit solche Zeilen nicht als neue Einfügungen behandelt und bei der nächsten Synchronisation nicht hochgeladen werden.

  2. Erstellen Sie als Nächstes, ebenfalls in der entfernten Datenbank, eine Prozedur, die als Ergebnismenge alle eingefügten Zeilen zurückgibt, die Teil des Uploads sein sollen.



    CREATE PROCEDURE employee_insert()
    RESULT( id  unsigned integer,
              name varchar( 256 ),
              salary numeric( 9,2 )
          )
    BEGIN
        DECLARE start_time timestamp;
    
        SELECT value
        INTO start_time
        FROM #hook_dict
        WHERE name = 'start progress as timestamp';
    
        // Upload as inserts all rows inserted after the start_time
        // that were not subsequently deleted
        SELECT id, name, salary
        FROM employee e
        WHERE insert_time > start_time AND
           NOT EXISTS( SELECT id FROM employee_delete ed  WHERE ed.id = e.id );
    
    END;

Ergebnisse

Diese Prozedur gibt alle Zeilen zurück, die basierend auf insert_time seit dem letzten erfolgreichen Upload eingefügt und anschließend nicht gelöscht wurden. Der Zeitpunkt des letzten erfolgreichen Uploads wird durch den Wert des Start-Verarbeitungsfortschritts in der Tabelle #hook_dict definiert. Dieses Beispiel benutzt die Standardeinstellung für die erweiterte dbmlsync-Option LockTables, sodass dbmlsync die zu synchronisierenden Tabellen sperrt. Daher brauchen Sie keine Zeilen auszuschließen, die nach dem Verarbeitungsfortschritts-Abschluss eingefügt wurden. Die Tabellensperren verhindern jegliche Vorgänge nach dem Verarbeitungsfortschritts-Abschluss, während der Upload durchgeführt wird.

Nächste Schritte

Gehen Sie weiter zu Lektion 4: Umgang mit Aktualisierungen.