Anfang des InhaltsbereichsLOCK-Option (lock_option) Dokument im Navigationsbaum lokalisieren

Die LOCK-Option (lock_option) fordert eine entsprechende Sperre für jede selektierte Zeile an.

Syntax

<lock_option> ::=
  WITH LOCK [(NOWAIT)] [EXCLUSIVE | OPTIMISTIC] [ISOLATION LEVEL <unsigned_integer>]

unsigned_integer darf nur die Werte 0, 1, 2, 3, 10, 15, 20 oder 30 annehmen

Erläuterung

EXCLUSIVE

Es wird eine exklusive Sperre (siehe Transaktionen) definiert. Solange die gesperrte Zeile noch nicht geändert oder gelöscht wurde, kann die exklusive Sperre mit der UNLOCK-Anweisung rückgängig gemacht werden.

OPTIMISTIC

Es wird eine optimistische Sperre auf Zeilen definiert. Diese ist nur sinnvoll zusammen mit den Isolation-Levels 0, 1, 10 und 15. Eine Änderungsoperation des aktuellen Benutzers auf einer von ihm optimistisch gesperrten Zeile wird nur durchgeführt, wenn diese Zeile nicht zwischenzeitlich von einer konkurrierenden Transaktion geändert wurde. Wurde diese Zeile zwischenzeitlich von einer konkurrierenden Transaktion geändert, wird die Änderungsoperation des aktuellen Benutzers zurückgewiesen. In beiden Fällen wird die optimistische Sperre freigegeben. Im Falle der erfolgreichen Änderungsoperation wird eine exklusive Sperre für diese Zeile gesetzt. Im Falle einer erfolglosen Änderungsoperation sollte diese Änderungsoperation erst nach einem erneuten Lesen ohne oder mit optimistischer Sperre wiederholt werden. So kann sichergestellt werden, daß die Änderung noch auf dem aktuellen Zustand aufsetzt und keine zwischenzeitlichen Änderungen verloren gehen.

Die Anforderung einer optimistischen Sperre kollidiert nur mit einer exklusiven Sperre. Konkurrierende Transaktionen kollidieren nicht mit einer optimistischen Sperre.

SHARE-Sperre

Wird weder EXCLUSIVE noch OPTIMISTIC angegeben, so definiert das eine SHARE-Sperre auf Zeilen. Wenn eine SHARE-Sperre auf eine Zeile gesetzt wurde, kann keine konkurrierende Transaktion diese Zeile verändern.

ISOLATION LEVEL

Das Setzen der Sperren geschieht unabhängig von der ISOLATION-Spezifikation (isolation_spec) der CONNECT-Anweisung. Das Isolation-Level der LOCK-Option kann einen höheren oder niedrigeren Wert als den der CONNECT-Anweisung bezeichnen. Die Bedeutung der verschiedenen Isolation-Levels ist wie die Bedeutung, die in der Beschreibung der CONNECT-Anweisung angegeben ist.

Wenn durch die LOCK-Option ein Isolation-Level angegeben wird, gilt dieses nur für die Dauer der SQL-Anweisung, in der die LOCK-Option angegeben ist. Anschließend gilt wieder das Isolation-Level, das in der CONNECT-Anweisung angegeben wurde. Im Fall einer SELECT-Anweisung (named_select_statement), einer SELECT-Anweisung (select_statement) oder einer OPEN CURSOR-Anweisung, bei der die Ergebnistabelle nicht physisch erzeugt wird, gilt das spezifizierte Isolation-Level für diese SQL-Anweisung und alle FETCH-Anweisungen, die sich auf diese Ergebnistabelle beziehen. Für zwischenzeitlich durchgeführte, andere SQL-Anweisungen gilt das Isolation-Level, das in der CONNECT-Anweisung angegeben wurde.

NOWAIT

Wenn (NOWAIT) angegeben wird, wird nicht auf die Freigabe eines von einem anderen Benutzer gesperrten Datenobjekts gewartet, sondern im Fall einer Kollision eine Rückmeldung ausgegeben. Liegt keine Kollision vor, wird die gewünschte Sperre gesetzt.

Wird (NOWAIT) nicht angegeben, wird im Falle einer Kollision auf die Freigabe des gesperrten Datenobjekts gewartet (jedoch maximal so lange wie der Installationsparameter REQUEST_TIMEOUT angibt).

Ende des Inhaltsbereichs