Gestattet es Ihnen, Verletzungen der referenziellen Integrität beim Downloadvorgang zu beheben
Name | Wert | Beschreibung |
---|---|---|
publication_n (in) |
Publikation |
Nicht mehr empfohlen. Verwenden Sie stattdessen subscription_n. Die synchronisierten Publikationen, wobei n eine Ganzzahl ist. Es gibt einen publication_n-Eintrag für jede synchronisierte Publikation. Die Nummerierung von n beginnt bei Null. |
MobiLink user (in) |
MobiLink-Benutzername |
Der MobiLink-Benutzer, für den Sie synchronisieren |
foreign key table (in) |
Tabellenname |
Die Tabelle, die die Fremdspalte enthält, für die der Hook aufgerufen wird |
primary key table (in) |
Tabellenname |
Die Tabelle, die vom Fremdschlüssel referenziert wird, für den der Hook aufgerufen wurde |
role name (in) |
Rollenname |
Der Rollenname des Fremdschlüssels, für den der Hook aufgerufen wird |
script version (in) |
Skriptversionsname |
Die MobiLink-Skriptversion, die für die Synchronisation verwendet werden soll |
subscription_n (in) | Subskriptionsname(n) | Die synchronisierten Subskriptionen, wobei n eine Ganzzahl ist. Dies ist ein subscription_n-Eintrag für jede synchronisierte Subskription. Die Nummerierung von n beginnt bei Null. |
Eine Download-RI-Verletzung tritt ein, wenn Zeilen im Download die Fremdschlüsselbeziehungen in der entfernten Datenbank verletzen. Mit diesem Hook können Sie versuchen, RI-Verletzungen zu beheben, bevor dbmlsync die Zeilen entdeckt, die den Konflikt verursachen.
Nachdem der Download abgeschlossen ist, aber noch vor dem Festschreiben, prüft dbmlsync auf RI-Verletzungen. Wenn eine Verletzung gefunden wird, identifiziert das Dienstprogramm einen Fremdschlüssel, der eine RI-Verletzung enthält, und ruft sp_hook_dbmlsync_download_log_ri_violation auf (sofern implementiert). Danach ruft es sp_hook_dbmlsync_download_ri_violation auf (sofern implementiert). Wenn weiterhin ein Konflikt besteht, löscht dbmlsync die Zeilen. Dieser Prozess wird für die restlichen Fremdschlüssel wiederholt, bei denen RI-Verletzungen vorkommen.
Dieser Hook wird nur aufgerufen, wenn RI-Verletzungen für Tabellen vorkommen, die derzeit synchronisiert werden. Wenn RI-Verletzungen für Tabellen vorhanden sind, die nicht synchronisiert werden, wird dieser Hook nicht aufgerufen, und die Synchronisation schlägt fehl.
Dieser Hook wird über die gleiche Verbindung aufgerufen, die auch dbmlsync für den Download verwendet. Der Hook darf keine expliziten oder impliziten Festschreibungen enthalten, da diese zur Inkonsistenz der Daten in der Datenbank führen können. Die Aktionen dieses Hooks werden festgeschrieben bzw. zurückgesetzt, wenn der Download festgeschrieben bzw. zurückgesetzt wird.
Im Unterschied zu anderen Hook-Aktionen werden die Vorgänge, die während dieses Hooks ausgeführt werden, bei der nächsten Synchronisation nicht in den Upload einbezogen.
Dieses Beispiel verwendet die unten stehenden Department- und Employee-Tabellen:
CREATE TABLE Department( "department_id" INTEGER primary key ); CREATE TABLE Employee( "employee_id" INTEGER PRIMARY KEY, "department_id" INTEGER, FOREIGN KEY EMPLOYEE_FK1 (department_id) REFERENCES Department ); |
Die folgende sp_hook_dbmlsync_download_ri_violation-Definition bereinigt Verletzungen der referenziellen Integrität zwischen den Department- und Employee-Tabellen. Sie überprüft den Rollennamen für den Fremdschlüssel und fügt fehlende department_id-Werte in die Department-Tabelle ein.
CREATE PROCEDURE sp_hook_dbmlsync_download_ri_violation() BEGIN IF EXISTS (SELECT * FROM #hook_dict WHERE name = 'role name' AND value = 'EMPLOYEE_FK1') THEN -- update the Department table with missing department_id values INSERT INTO Department SELECT distinct department_id FROM Employee WHERE department_id NOT IN (SELECT department_id FROM Department) END IF; END; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |