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

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Clientadministration » SQL Anywhere-Clients für MobiLink » Ereignis-Hooks für SQL Anywhere-Clients

 

sp_hook_dbmlsync_download_ri_violation

Gestattet es Ihnen, Verletzungen der referenziellen Integrität beim Downloadvorgang zu beheben

Zeilen in der Tabelle #hook_dict

Name

Wert

Beschreibung

publication_n (in)

Publikation

Die synchronisierten Publikationen, wobei n eine Ganzzahl ist. Es gibt einen publication_n-Eintrag für jede Publikation im Upload. 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

Bemerkungen

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

Siehe auch
Beispiel

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;