Zeigt an, ob eine Spalte die Ursache eines Konflikts in einem UPDATE ist, das gegenüber einer konsolidierten Datenbank in einer SQL Remote-Umgebung durchgeführt wird.
CONFLICT( Spaltenname )
Spaltenname Der Name der Spalte, die auf Konflikte untersucht wird.
Gibt TRUE zurück, wenn die Spalte in der VERIFY-Liste einer UPDATE-Anweisung angezeigt wird, die vom SQL Remote-Nachrichtenagenten ausgeführt wird, und wenn der in der VALUES-Liste gelieferte Wert dieser Anweisung nicht mit dem ursprünglichen Wert der Spalte in der Zeile übereinstimmt, die aktualisiert wird. Ansonsten wird FALSE zurückgegeben.
SQL/2003 Erweiterung des Herstellers
Die CONFLICT-Funktion ist für die Verwendung in SQL Remote RESOLVE UPDATE-Triggern gedacht, um Fehlermeldungen zu vermeiden. Um die Verwendung der CONFLICT-Funktion zu illustrieren, nehmen wir die folgende Tabelle:
CREATE TABLE Admin ( PKey bigint NOT NULL DEFAULT GLOBAL AUTOINCREMENT, TextCol CHAR(20) NULL, PRIMARY KEY ( PKey ) ); |
Nehmen wir an, dass sowohl konsolidierte als auch entfernte Datenbanken die folgende Zeile in der Admin-Tabelle haben:
1, 'Initial' |
Jetzt aktualisieren Sie in der konsolidierten Datenbank die Zeile folgendermaßen:
UPDATE Admin SET TextCol = 'Consolidated Update' WHERE PKey = 1; |
In der entfernten Datenbank altualisieren Sie die Zeile zu einem anderen Wert, und zwar folgendermaßen:
UPDATE Admin SET TextCol = 'Remote Update' WHERE PKey = 1; |
Als nächstes führen Sie dbremote in der entfernten Datenbank aus. Es wird eine Meldungsdatei generiert, die die folgenden Anweisungen enthält, die in der konsolidierten Datenbank ausgeführt werden sollen:
UPDATE Admin SET TextCol='Remote Update' VERIFY ( TextCol ) VALUES ( 'Initial' ) WHERE PKey=1; |
Wenn der SQL Remote-Nachrichtenagent auf der konsolidierten Datenbank läuft und diese UPDATE-Anweisung anwendet, verwendet SQL Anywhere die VERIFY- und VALUES-Klauseln, um zu ermitteln, ob ein RESOLVE UPDATE-Trigger ausgelöst wird. Ein RESOLVE UPDATE-Trigger wird nur ausgelöst, wenn das Update vom SQL Remote-Nachrichtenagenten gegenüber einer konsolidierten Datenbank ausgeführt wird. Hier ist ein RESOLVE UPDATE-Trigger:
CREATE TRIGGER ResolveUpdateAdmin RESOLVE UPDATE ON Admin REFERENCING OLD AS OldConsolidated NEW AS NewRemote REMOTE as OldRemote FOR EACH ROW BEGIN MESSAGE 'OLD'; MESSAGE OldConsolidated.PKey || ',' || OldConsolidated.TextCol; MESSAGE 'NEW'; MESSAGE NewRemote.PKey || ',' || NewRemote.TextCol; MESSAGE 'REMOTE'; MESSAGE OldRemote.PKey || ',' || OldRemote.TextCol; END; |
Der RESOLVE UPDATE-Trigger wird ausgelöst, weil der aktuelle Wert der TextCol-Spalte in der konsolidierten Datenbank ('Consolidated Update'
) nicht mit dem Wert in der VALUES-Klausel für die zugeordnete Spalte ('Initial'
) übereinstimmt.
Der Trigger führt zu einem Fehlschlag, weil die PKey-Spalte in der UPDATE-Anweisung, die auf der entfernten Datenbank ausgeführt wurde, nicht geändert wurde. Dadurch gibt es keinen OldRemote.PKey-Wert, auf den dieser Trigger zugreifen könnte.
Die CONFLICT-Funktion hilft, diesen Fehler zu vermeiden, indem die folgenden Werte zurückgegeben werden:
Wenn es keinen OldRemote.PKey-Wert gibt, wird FALSE zurückgegeben.
Wenn es einen OldRemote.PKey-Wert gibt, der aber mit OldConsolidated.PKey übereinstimmt, wird FALSE zurückgegeben.
Wenn es einen OldRemote.PKey-Wert gibt, der von OldConsolidated.PKey verschieden ist, wird TRUE zurückgegeben.
Sie können die CONFLICT-Funktion verwenden, um den Trigger neu zu schreiben und den Fehler zu vermeiden:
CREATE TRIGGER ResolveUpdateAdmin RESOLVE UPDATE ON Admin REFERENCING OLD AS OldConsolidated NEW AS NewRemote REMOTE as OldRemote FOR EACH ROW BEGIN message 'OLD'; message OldConsolidated.PKey || ',' || OldConsolidated.TextCol; message 'NEW'; message NewRemote.PKey || ',' || NewRemote.TextCol; message 'REMOTE'; if CONFLICT( PKey ) then message OldRemote.PKey; end if; if CONFLICT( TextCol ) then message OldRemote.TextCol; end if; 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 |