Unmittelbar bevor ein Ereignis-Hook aufgerufen wird, erstellt dbmlsync die #hook_dict-Tabelle in der entfernten Datenbank mit der folgenden CREATE-Anweisung. Das # vor dem Tabellennamen bedeutet, dass die Tabelle eine temporäre Tabelle ist.
CREATE TABLE #hook_dict( name VARCHAR(128) NOT NULL UNIQUE, value VARCHAR(10240) NOT NULL) |
Das Dienstprogramm dbmlsync verwendet die Tabelle #hook_dict, um Werte an Hook-Funktionen weiterzugeben. Hook-Funktionen verwenden die Tabelle #hook_dict, um Werte an dbmlsync zurückzugeben.
Jede Hook-Prozedur empfängt Parameterwerte. In einigen Fällen können Sie den Wert ändern, damit ein neuer Wert zurückgegeben wird, andere Parameter wiederum sind schreibgeschützt. Jede einzelne Zeile in der Tabelle enthält den Wert für einen Parameter.
Wenn beispielsweise in der folgenden dbmlsync-Befehlszeile der sp_hook_dbmlsync_abort-Hook aufgerufen wird, enthält die Tabelle #hook_dict folgende Zeilen:
dbmlsync -c 'dsn=MyDsn' -n pub1,pub2 -u MyUser |
#hook_dict-Zeile |
Wert |
---|---|
publication_0 |
pub1 |
publication_1 |
pub2 |
MobiLink user |
MyUser |
Abort synchronization |
false |
Der abort-Hook kann die Werte aus der Tabelle #hook_dict abrufen und sie benutzen, um sein Verhalten anzupassen. Um beispielsweise den MobiLink-Benutzer abzurufen, verwenden Sie eine SELECT-Anweisung der folgenden Art:
SELECT value FROM #hook_dict WHERE name = 'MobiLink user' |
I/O-Parameter können von Ihrem Hook aktualisiert werden, um das Verhalten von dbmlsync zu ändern. Ihr Hook könnte beispielsweise dbmlsync anweisen, die Synchronisation abzubrechen, indem die Synchronisationszeile 'abort' der Tabelle mit einer Anweisung der folgenden Art aktualisiert wird:
UPDATE #hook_dict SET value='true' WHERE name='abort synchronization' |
Die Beschreibung der einzelnen Hooks listet die Zeilen in der Tabelle #hook_dict auf.
Folgendes Beispiel einer sp_hook_dbmlsync_delay-Prozedur veranschaulicht, wie die Tabelle #hook_dict verwendet wird, um Argumente weiterzugeben. Die Prozedur gestattet die Synchronisation nur außerhalb einer geplanten Auszeit des MobiLink-Systems zwischen 18:00 Uhr und 19:00 Uhr.
CREATE PROCEDURE sp_hook_dbmlsync_delay() BEGIN DECLARE delay_val integer; SET delay_val=DATEDIFF( second, CURRENT TIME, '19:00'); IF (delay_val>0 AND delay_val<3600) THEN UPDATE #hook_dict SET value=delay_val WHERE name='delay duration'; END IF; END |
Die folgende Prozedur wird am Anfang der Synchronisation in der entfernten Datenbank ausgeführt. Sie ruft den aktuellen MobiLink-Benutzernamen auf (einen der Parameter, die für das Ereignis sp_hook_dbmlsync_begin verfügbar sind) und zeigt ihn im SQL Anywhere-Meldungsfenster an.
CREATE PROCEDURE sp_hook_dbmlsync_begin() BEGIN DECLARE syncdef VARCHAR(150); SELECT '>>>syncdef = ' || value INTO syncdef FROM #hook_dict WHERE name ='MobiLink user name'; MESSAGE syncdef TYPE INFO TO CONSOLE; END |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |