## LOCK-Option (lock_option)

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>]

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

### 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 spezielle 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

Wenn weder EXCLUSIVE noch OPTIMISTIC angegeben wird, dann 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 (select_statement), 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:

LOCK-Anweisung (lock_statement)

Konzepte des Datenbanksystems, Sperren für Datenbankobjekte