FOR UPDATE-Klausel einer SELECT-Anfrage

Die FOR UPDATE-Klausel stellt die allerletzte Klausel einer SELECT-Anweisung dar. Anders als die sechs vorgangegangnen Klauseln (SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY) hat sie keine Bedeutung für die Semantik der Anfrage und bietet "nur" die Möglichkeit, die in der Anfrage selektierten Datensätze zu sperren. Sinn macht diese Klausel, wenn in Anwendungen (PL-SQL, Java, C, ...) Daten aus der Datenbasis ins Programm geholt werden, um dann dort weiter verarbeitet zu werden und anschließend die Änderungen wieder in die Datenbasis zurückgeschrieben werden mittels des UPDATE-Befehls oder gelöscht werden mittels des DELETE-Befehls?.

Syntax einer FOR UPDATE-Klausel

   <FOR UPDATE Klausel>   ::=   FOR UPDATE  [ OF [Schemaname.][Tabellenname.]|[Viewname.]Spaltenname ] 
                                            [ [NOWAIT] | [WAIT integer] | [SKIP LOCKED] ] 
  • Wird auf die OF Spaltenname-Klausel verzichtet, dann werden alle durch die Anfrage selektierten Datensätze gesperrt, auch wenn sie sich auf mehrere Tabellen bzw. Sicht verteilen. Sollen nun aber nur die Datensätze einer bestimmten Tabelle bzw. Sicht gesperrt werden, so ist diese Tabelle bzw. Sicht durch einen ihrer Spaltennamen zu spezifizieren. Anders als die Syntax dieser Klausel ggf. suggeriert, werden immer die gesamten Datensätze in einer Tabelle und nicht eine einzelne Spalte gesperrt.
  • Stößt das DBMS? bei seinem Sperrversuch auf bereits durch andere Transaktionen gesperrte Tabellen oder Sichten und ist NOWAIT spezifiziert, so beendet das DBMS sofort den Sperrversuch erfolglos und gibt die Kontrolle an das Programm resp. den Benutzer zurück.
  • Ist im gleichen Fall die WAIT-Option definiert, dann wartet das DBMS um die Anzahl (integer) der vorgegebenen Sekunden, ob in dieser Zeit die gesperrte Tabelle bzw. Sicht wieder freigegeben wird.
  • SKIP LOCKED ist ein Oracle-Feature und ermöglicht es freie Datensätze zu sperren und die durch andere Transaktionen gesperrten Datensätze einfach auszulassen, zu überspringen. Es wird u.a. bei Oracle Streams Advanced Queuing eingesetzt.

Anmerkungen

Quellen:

  • Quellen/Standards in http://www.wiscorp.com/SQLStandards.html und http://www.jcc.com/sql.htm
  • INCITS/ISO/IEC 9075-1-2008. Part 1 "SQL/Framework", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • INCITS/ISO/IEC 9075-1-2008. Part 2 "SQL/Foundation", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • Adams, Ralf: "SQL - Eine Einführung mit vertiefenden Exkursen", Hanser, München, 2012, ISBN 978-3-446-43200-0
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Kemper, Alfons/Eickler, André: "Datenbanksysteme", Oldenbourg, München, 2009, 978-3-486-59018-0
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
  • Sieben, Jürgen: "Oracle® SQL - Das umfassende Handbuch", Galileo Press, 2012, ISBN 978-3-8362-1875-7
  • Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, München, 2008, ISBN 978-3-486-27574-2

Kategorie: SQL, F