Die LOCK-Option (
lock_option) fordert eine Sperre für jede selektierte Zeile an.Syntax
<lock_option> ::=
WITH LOCK [(IGNORE)|(NOWAIT)] [EXCLUSIVE|OPTIMISTIC] [ISOLATION LEVEL <unsigned_integer>]
Erläuterung
IGNORE
Wenn
(IGNORE) nicht angegeben wird, wird im Falle einer Sperrkollision auf die Freigabe einer Zeilensperre gewartet (jedoch maximal so lange wie der Datenbankparameter REQUEST_TIMEOUT angibt).Wenn
(IGNORE) spezifiziert wird, wird nicht auf die Freigabe einer Zeilensperre durch eine andere Transaktion gewartet, sondern im Fall einer Sperrkollision diese Zeile ignoriert. Liegt keine Kollision vor, wird die gewünschte Sperre gesetzt. (IGNORE) kann nur im Isolation-Level 1 angegeben werden.NOWAIT
Wenn
(NOWAIT) nicht angegeben wird, wird im Falle einer Sperrkollision auf die Freigabe des gesperrten Datenobjekts gewartet (jedoch maximal so lange wie der Datenbankparameter REQUEST_TIMEOUT angibt).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.EXCLUSIVE
Es wird eine
Schreibsperre definiert. Solange die gesperrte Zeile noch nicht geändert oder gelöscht wurde, kann die Schreibsperre mit der UNLOCK-Anweisung zurückgenommen werden.OPTIMISTIC
Es wird eine
optimistische Sperre auf Zeilen definiert. Diese ist nur in Zusammenhang mit den Isolation-Levels 0, 1, 10 und 15 sinnvoll.Lesesperre
Wird weder EXCLUSIVE noch OPTIMISTIC angegeben, so wird eine
Lesesperre auf die entsprechenden Zeilen gesetzt.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 haben.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.Siehe auch:
Sperrverhalten