UPDATE (Deutsch)
Zweck
Verwenden Sie die Anweisung UPDATE
, um vorhandene Werte in einer Tabelle oder in der Basistabelle einer Ansicht oder zu ändern die Haupttabelle einer materialisierten Ansicht.
Zusätzliche Themen
-
Voraussetzungen
-
Syntax
-
Semantik
-
Beispiele
Voraussetzungen
Für Um Werte in einer Tabelle zu aktualisieren, muss sich die Tabelle in Ihrem eigenen Schema befinden oder Sie müssen über das Objektprivileg UPDATE
für die Tabelle verfügen.
Damit Sie aktualisieren können Werte in der Basistabelle einer Ansicht:
-
Sie müssen über die Objektberechtigung
UPDATE
für die Ansicht und -
Wer das Schema mit der Ansicht besitzt, muss über die Objektberechtigung
UPDATE
für die Basistabelle verfügen.
Mit dem Systemprivileg UPDATE
ANY
TABLE
können Sie auch Werte in einem beliebigen System aktualisieren Tabelle oder in der Basistabelle
Sie müssen außerdem über die Objektberechtigung SELECT
für das Objekt verfügen, das Sie aktualisieren möchten, wenn:
-
Das Objekt befindet sich in einer entfernten Datenbank oder
-
Der Initialisierungsparameter
SQL92_SECURITY
wird aufTRUE
und die OperationUPDATE
verweisen auf Tabellenspalten, z. B. die Spalten in einerwhere_clause
.
Syntax
update :: =
Beschreibung der Abbildung update.gif
(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, return_clause :: =, error_logging_clause :: =)
DML_table_expression_clause :: =
Beschreibung der Abbildung DML_table_expression_clause.gif
(Unterabfrage :: = – Teil von SELECT, Unterabfragebeschränkungsklausel :: =, Tabellenkollektionsausdruck :: =)
Unterabfragebeschränkungsklausel :: =
Beschreibung der Abbildung subquery_restriction_clause.gif
table_collection_expression :: =
Beschreibung der Abbildung table_collection_expression.gif
update_set_clause :: =
Beschreibung der Abbildung update_set_clause. gif
where_clause :: =
Beschreibung der Abbildung where_clause.gif
return_clause :: =
Beschreibung der Abbildung return_clause.gif
error_logging_clause :: =
Beschreibung der Abbildung error_logging_clause.gif
Semantik
Hinweis
Geben Sie einen Kommentar an Dadurch werden Anweisungen zur Auswahl eines Ausführungsplans für die Anweisung an den Optimierer übergeben.
Sie können unmittelbar nach dem Schlüsselwort UPDATE
einen parallelen Hinweis einfügen, um beide unter zu parallelisieren Liegender Scan und UPDATE
Operationen.
Siehe auch:
-
Oracle Database Performance Tuning Guide und “ Verwenden von Hints „für die Syntax und Beschreibung von Hinweisen
-
Oracle Database Performance Tuning Guide und Oracle Database Concepts für detaillierte Informationen zu paralleler DML
DML_table_expression_clause
Die ONLY
-Klausel gilt nur für Ansichten. Geben Sie die Syntax ONLY
an, wenn die Ansicht in der Klausel UPDATE
eine Ansicht ist, die zu einer Hierarchie gehört, und Sie keine Zeilen von einer aktualisieren möchten
Siehe auch:
„Einschränkungen der DML_table_expression_clause“ und „Aktualisieren einer Tabelle: Beispiele“
Schema
Geben Sie das Schema an, das das zu aktualisierende Objekt enthält. Wenn Sie schema
weglassen, geht die Datenbank davon aus, dass sich das Objekt in Ihrem eigenen Schema befindet.
table | Ansicht | materialized_view | Unterabfrage
Geben Sie den Namen der Tabelle, Ansicht, materialisierten Ansicht oder der Spalten an, die von einer zu aktualisierenden Unterabfrage zurückgegeben werden. Das Ausgeben einer UPDATE
-Anweisung für eine Tabelle löst alle UPDATE
-Trigger aus, die der Tabelle zugeordnet sind.
-
Wenn Sie
view
angeben, aktualisiert die Datenbank die Basistabelle der Ansicht.Sie können eine Ansicht nur mitINSTEAD
OF
-Triggern aktualisieren, wenn die definierende Abfrage der Ansicht eines der folgenden Konstrukte enthält:
Ein Mengenoperator ADISTINCT
Operator Eine Aggregat- oder Analysefunktion AGROUP
BY
,ORDER
BY
,MODEL
,CONNECT
BY
oderSTART
WITH
Klausel Ein Sammlungsausdruck in aSELECT
Liste Eine Unterabfrage in einerSELECT
Liste Eine Unterabfrage mit der BezeichnungWITH READ ONLY
Joins, mit einigen Ausnahmen , wie im Oracle Database Administrator-Handbuch dokumentiert.
-
Sie können nicht mehr als eine Basistabelle über eine Ansicht aktualisieren.
-
Wenn die Die Ansicht wurde mit der
WITH
CHECK
, dann können Sie die Ansicht nur aktualisieren, wenn die resultierenden Daten die definierende Abfrage der Ansicht erfüllen. -
Wenn
table
oder die Basistabelle vonview
enthält eine oder mehrere Domänenindexspalten. Anschließend führt diese Anweisung die entsprechende Aktualisierungsroutine für den Indextyp aus. -
Sie können keine Zeilen in einer schreibgeschützten materialisierten Ansicht aktualisieren. Wenn Sie Zeilen in einer beschreibbaren materialisierten Ansicht aktualisieren, aktualisiert die Datenbank die Zeilen aus der zugrunde liegenden Containertabelle. Die Aktualisierungen werden jedoch beim nächsten Aktualisierungsvorgang überschrieben. Wenn Sie Zeilen in einer aktualisierbaren materialisierten Ansicht aktualisieren, die Teil einer materialisierten Ansichtsgruppe ist, aktualisiert die Datenbank auch die entsprechenden Zeilen in der Mastertabelle.
Siehe Außerdem:
-
Oracle Data Cartridge-Entwicklerhandbuch für weitere Informationen zu den Aktualisierungsroutinen für Indextypen
-
MATERIALISIERTE ANSICHT ERSTELLEN für Informationen zu Erstellen aktualisierbarer materialisierter Ansichten
PARTITION | UNTERTEILUNG
Geben Sie den Namen der Partition oder Unterpartition in table
für Updates vorgesehen. Sie müssen den Partitionsnamen nicht angeben, wenn Sie Werte in einer partitionierten Tabelle aktualisieren. In einigen Fällen kann die Angabe des Partitionsnamens jedoch effizienter sein als eine komplizierte where_clause
Siehe auch:
„Verweisen auf partitionierte Tabellen und Indizes“ und „Aktualisieren einer Partition: Beispiel“
dblink
Geben Sie an ein vollständiger oder teilweiser Name einer Datenbankverbindung zu einer entfernten Datenbank, wobei t Das Objekt befindet sich. Sie können eine Datenbankverknüpfung zum Aktualisieren eines Remote-Objekts nur verwenden, wenn Sie die verteilte Oracle Database-Funktionalität verwenden.
Wenn Sie dblink,
weglassen, geht die Datenbank davon aus, dass es sich um das Objekt handelt in der lokalen Datenbank.
Siehe auch:
„Verweisen auf Objekte in entfernten Datenbanken“ für Informationen zum Verweisen auf Datenbankverknüpfungen
subquery_restriction_clause
Verwenden Sie subquery_restriction_clause
, um die Unterabfrage auf eine der folgenden Arten einzuschränken:
NUR MIT LESEN Geben Sie WITH READ ONLY
an Geben Sie WITH CHECK OPTION
an, um anzugeben, dass Oracle Database Änderungen an der Tabelle oder Ansicht verbietet, die dazu führen würden, dass die Tabelle oder Ansicht nicht aktualisiert werden kann.
WITH CHECK OPTION Zeilen, die nicht in der Unterabfrage enthalten sind. Bei Verwendung in der Unterabfrage einer DML-Anweisung können Sie diese Klausel in einer Unterabfrage in der FROM
-Klausel angeben, jedoch nicht in der Unterabfrage in der WHERE
-Klausel.
CONSTRAINT-Einschränkung Geben Sie den Namen der CHECK OPTION
-Einschränkung an. Wenn Sie diesen Bezeichner weglassen, weist Oracle der Einschränkung automatisch einen Namen der Form SYS_C
n
zu, wobei n eine Ganzzahl ist, die die In der Datenbank eindeutiger Einschränkungsname.
Siehe auch:
„Verwenden der WITH CHECK OPTION-Klausel: Beispiel“
table_collection_expression
Die Mit table_collection_expression
können Sie Oracle darüber informieren, dass der Wert von collection_expression
für Abfrage- und DML-Operationen als Tabelle behandelt werden soll. Die collection_expression
kann eine Unterabfrage, eine Spalte, eine Funktion oder ein Auflistungskonstruktor sein. Unabhängig von seiner Form muss ein Auflistungswert zurückgegeben werden, dh ein Wert, dessen Typ verschachtelte Tabelle oder Varray ist. Dieser Vorgang zum Extrahieren der Elemente einer Sammlung wird als Sammlung ohne Verschachtelung bezeichnet.
Das optionale Pluszeichen (+) ist relevant, wenn Sie den Ausdruck TABLE
mit dem übergeordneten Element verbinden Tabelle. Das + erstellt eine äußere Verknüpfung der beiden, sodass die Abfrage Zeilen aus der äußeren Tabelle zurückgibt, auch wenn der Auflistungsausdruck null ist.
Hinweis:
In früheren Versionen von Oracle, Wenn collection_expression
eine Unterabfrage war, wurde table_collection_expression
ausgedrückt als THE
subquery
.Diese Verwendung ist jetzt veraltet.
Sie können eine table_collection_expression
verwenden, um Zeilen in einer Tabelle basierend auf Zeilen aus einer anderen Tabelle zu aktualisieren. Sie können beispielsweise vier vierteljährliche Verkaufstabellen in einer jährlichen Verkaufstabelle zusammenfassen.
t_alias
Geben Sie einen Korrelationsnamen (Alias) für die Tabelle, Ansicht oder Unterabfrage an, auf die verwiesen werden soll an anderer Stelle in der Erklärung. Dieser Alias ist erforderlich, wenn DML_table_expression_clause
auf Objekttypattribute oder Objekttypmethoden verweist.
Siehe auch:
„Korreliertes Update: Beispiel „
Einschränkungen für die DML_table_expression_clause Diese Klausel unterliegt den folgenden Einschränkungen:
-
Sie können diese Anweisung nicht ausführen, wenn
table
oder die Basistabelle vonview
enthält alle Domänenindizes, die mitIN_PROGRESS
oderFAILED
gekennzeichnet sind. -
Sie können keine Partition in eine Partition einfügen, wenn betroffene Indexpartitionen mit
UNUSABLE
gekennzeichnet sind. -
Sie können die
order_by_clause
nicht in der Unterabfrage derDML_table_expression_clause
angeben. -
Wenn Sie einen Index, eine Indexpartition oder eine Indexunterpartition angeben, die als
UNUSABLE
markiert wurde, schlägt die AnweisungUPDATE
fehl, es sei denn, dieSKIP_UNUSABLE_INDEXES
Sitzungsparameter wurde aufTRUE
gesetzt.
Siehe auch:
ALTER SESSION für Informationen zu SKIP_UNUSABLE_INDEXES
Sitzungsparameter
update_set_clause
Mit update_set_clause
können Sie Spaltenwerte festlegen.
Spalte
Geben Sie den Namen einer Spalte des Objekts an, das aktualisiert werden soll. Wenn Sie eine Spalte der Tabelle in update_set_clause
weglassen, bleibt der Wert dieser Spalte unverändert.
Wenn column
bezieht sich auf ein LOB-Objektattribut. Anschließend müssen Sie es zuerst mit dem Wert leer oder null initialisieren. Sie können es nicht mit einem Literal aktualisieren. Wenn Sie einen LOB-Wert mit einer anderen Methode als einer direkten UPDATE
SQL-Anweisung aktualisieren, müssen Sie zuerst die Zeile sperren, die das LOB enthält. Weitere Informationen finden Sie unter for_update_clause.
Wenn column
Teil des Partitionierungsschlüssels einer partitionierten Tabelle ist, UPDATE
schlägt fehl, wenn Sie einen Wert in der Spalte ändern, der die Zeile auf eine andere Partition oder Unterpartition verschieben würde, es sei denn, Sie aktivieren die Zeilenverschiebung. Weitere Informationen finden Sie unter row_movement_clause
von CREATE TABLE oder ALTER TABLE.
Wenn column
Teil des Partitionierungsschlüssel einer durch Listen partitionierten Tabelle, dann schlägt UPDATE
fehl, wenn Sie einen Wert für die Spalte angeben, der noch nicht in partition_value
Liste einer der Partitionen.
Unterabfrage
Geben Sie eine Unterabfrage an, die für jede aktualisierte Zeile genau eine Zeile zurückgibt.
-
Wenn Wenn Sie in
update_set_clause
nur eine Spalte angeben, kann die Unterabfrage nur einen Wert zurückgeben. -
Wenn Sie mehrere Spalten in angeben
update_set_clause
, dann muss die Unterabfrage so viele Werte zurückgeben, wie Sie Spalten angegeben haben. -
Wenn die Unterabfrage keine Zeilen zurückgibt, wird die Der Spalte wird eine Null zugewiesen.
-
Wenn sich diese
subquery
auf entfernte Objekte bezieht, wird dieUPDATE
kann parallel ausgeführt werden, solange der Verweis ausgeführt wird ce kehrt nicht zu einem Objekt in der lokalen Datenbank zurück. Wenn sich diesubquery
in derDML_table_expression_clause
jedoch auf entfernte Objekte bezieht, ist dieUPDATE
Der Vorgang wird seriell ohne Benachrichtigung ausgeführt.
Sie können die flashback_query_clause
in der Unterabfrage verwenden, um mit früheren Daten. Weitere Informationen zu dieser Klausel finden Sie in der flashback_query_clause von SELECT
.
Siehe auch:
-
SELECT und „Using Subqueries“
-
parallel_clause in der CREATE TABLE-Dokumentation
expr
Geben Sie einen Ausdruck an, der in den neuen Wert aufgelöst wird, der der entsprechenden Spalte zugewiesen ist.
Siehe auch:
Kapitel 6, „Ausdrücke“ für die Syntax von expr
und „Aktualisieren einer Objekttabelle: Beispiel“
STANDARD Geben Sie DEFAULT
an, um die Spalte auf den zuvor als Standard angegebenen Wert festzulegen Wert für die Spalte. Wenn kein Standardwert für die entsprechende Spalte angegeben wurde, setzt die Datenbank die Spalte auf null.
Einschränkung beim Aktualisieren auf Standardwerte Sie können DEFAULT
if nicht angeben Sie aktualisieren eine Ansicht.
VALUE-Klausel
Mit der VALUE
-Klausel können Sie die gesamte Zeile einer Objekttabelle angeben.
Einschränkung der VALUE-Klausel Sie können diese Klausel nur für eine Objekttabelle angeben.
Hinweis:
Wenn Sie Zeichenfolgenliterale in eine RAW
-Spalte einfügen, führt Oracle Database bei nachfolgenden Abfragen einen vollständigen Tabellenscan durch anstatt einen Index zu verwenden, der möglicherweise in der Spalte RAW
vorhanden ist.
Siehe auch:
„Aktualisieren einer Objekttabelle: Beispiel“
where_clause
Mit where_clause
können Sie die aktualisierten Zeilen auf diejenigen beschränken, für die die angegebene condition
ist wahr. Wenn Sie diese Klausel weglassen, aktualisiert die Datenbank alle Zeilen in der Tabelle oder Ansicht. Die Syntax von condition
finden Sie in Kapitel 7, „Bedingungen“.
Die where_clause
bestimmt die Zeilen in Welche Werte werden aktualisiert? Wenn Sie nicht where_clause
angeben, werden alle Zeilen aktualisiert. Für jede Zeile, die die where_clause
erfüllt, werden die Spalten links vom Gleichheitsoperator (=) in der update_set_clause
auf die Werte gesetzt der entsprechenden Ausdrücke rechts vom Operator. Die Ausdrücke werden ausgewertet, wenn die Zeile aktualisiert wird.
Rückgabeklausel
Die Rückgabeklausel ruft die von einer DML-Anweisung betroffenen Zeilen ab. Sie können diese Klausel für Tabellen und materialisierte Ansichten sowie für Ansichten mit einer einzelnen Basistabelle angeben.
Wenn Sie eine einzelne Zeile bearbeiten, eine DML-Anweisung mit einer returning_clause
Sie können Spaltenausdrücke mithilfe der betroffenen Zeile, Zeilen-ID und REFs
in die betroffene Zeile abrufen und in Hostvariablen oder PL / SQL-Variablen speichern.
Bei der Bearbeitung Bei mehreren Zeilen speichert eine DML-Anweisung mit der returning_clause
Werte aus Ausdrücken, Zeilen-IDs und REFs
, an denen die betroffenen Zeilen in Bindungsarrays beteiligt sind.
Ausdruck Jedes Element in der Liste expr
muss eine gültige Ausdruckssyntax sein.
INTO Die INTO
-Klausel gibt an, dass die Werte der geänderten Zeilen in den Variablen gespeichert werden sollen, die in der Liste data_item
angegeben sind.
data_item Jedes data_item
ist eine Hostvariable oder PL / SQL-Variable, die den abgerufenen expr
-Wert speichert.
Für jeden Ausdruck in der Liste RETURNING
müssen Sie in der INTO
Liste.
Einschränkungen Die folgenden Einschränkungen gelten für die RETURNING
-Klausel:
-
Die
expr
ist wie folgt eingeschränkt:-
Für
UPDATE
undDELETE
Anweisungen Jedeexpr
muss ein einfacher Ausdruck oder ein Aggregatfunktionsausdruck mit einem Satz sein. Sie können einfache Ausdrücke und einzelne Satzaggregatfunktionsausdrücke nicht in derselbenreturning_clause
kombinieren. FürINSERT
-Anweisungen muss jedeexpr
ein einfacher Ausdruck sein. Aggregatfunktionen werden in einerINSERT
-AnweisungRETURNING
-Klausel nicht unterstützt. -
Single- Festgelegte Aggregatfunktionsausdrücke dürfen nicht das Schlüsselwort
DISTINCT
enthalten.
-
-
Wenn die
expr
-Liste enthält eine Primärschlüsselspalte oder eine andereNOT
NULL
-Spalte. Die Update-Anweisung schlägt fehl, wenn die Tabelle vorhanden ist Ein darauf definierterBEFORE
UPDATE
-Trigger. -
Sie können den
returning_clause
für eine multitable Einfügung. -
Sie können diese Klausel nicht mit paralleler DML oder mit Remote-Objekten verwenden.
-
Mit dieser Klausel können Sie keine
LONG
-Typen abrufen. -
Sie können diese Klausel nicht für eine Ansicht angeben, für die Ein
INSTEAD
OF
-Trigger wurde definiert.
Siehe auch :
PL / SQL-Benutzer “ s Handbuch und Referenz für Informationen zur Verwendung der Klausel BULK
COLLECT
, um mehrere Werte an Sammlungsvariablen zurückzugeben
error_logging_clause
Die error_logging_clause verhält sich in einer UPDATE
-Anweisung genauso wie in einer INSERT
-Anweisung. Weitere Informationen finden Sie in der Anweisung INSERT
error_logging_clause.
Siehe auch:
„Einfügen in eine Tabelle mit Fehlerprotokollierung: Beispiel“
Beispiele
Aktualisieren einer Tabelle: Beispiele Folgendes Die Anweisung gibt allen Mitarbeitern mit dem Job SH_CLERK
null Provisionen:
UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";
Die folgende Anweisung befördert Douglas Grant zum Manager von Abteilung 20 mit einer Erhöhung von 1.000 USD:
UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant";
Die folgende Erklärung erhöht das Gehalt eines Mitarbeiters in der employees
Tabelle in der Datenbank remote
:
UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";
Das nächste Beispiel zeigt die folgenden syntaktischen Konstrukte der UPDATE
Anweisung:
-
Beide Formen der
update_set_clause
zusammen in einer einzigen Anweisung -
Eine korrelierte Unterabfrage
-
Eine
where_clause
, um die aktualisierten Zeilen
Die vorhergehende UPDATE
-Anweisung führt die folgenden Operationen aus:
-
Aktualisiert nur die Mitarbeiter, die in Genf oder München arbeiten (Standorte 2900 und 2700).
-
Legt
department_id
für diese Mitarbeiter an diedepartment_id
, die Bombay entspricht (location_id
2100) -
Setzt das Gehalt jedes Mitarbeiters auf das 1,1-fache des Durchschnittsgehalts seiner Abteilung
-
Setzt die Provision jedes Mitarbeiters auf das 1,5-fache der durchschnittlichen Provision seiner Abteilung
Aktualisieren einer Partition: Beispiel Im folgenden Beispiel werden Werte in einer einzelnen Partition der Tabelle sales
aktualisiert:
UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;
Aktualisieren einer Objekttabelle: Beispiel Mit der folgenden Anweisung werden zwei Objekttabellen erstellt: people_demo1
und people_demo2
, des in Tabellensammlungen erstellten people_typ
-Objekts: Beispiele. Das Beispiel zeigt, wie eine Zeile von people_demo1
aktualisiert wird, indem eine Zeile aus people_demo2
ausgewählt wird:
Das Beispiel verwendet die VALUE
Objektreferenzfunktion sowohl in der SET
-Klausel als auch in der Unterabfrage.
Korreliertes Update: Beispiel Ein Beispiel dafür verwendet eine korrelierte Unterabfrage zum Aktualisieren verschachtelter Tabellenzeilen. Weitere Informationen finden Sie unter „Tabellensammlungen: Beispiele“.
Verwenden der RETURNING-Klausel während des UPDATE: Beispiel Das folgende Beispiel gibt Werte aus der aktualisierten Zeile zurück und speichert das Ergebnis in PL / SQL-Variablen bnd1
, bnd2
, bnd3
:
Die Das folgende Beispiel zeigt, dass Sie im Ausdruck der Rückgabeklausel eine Aggregatfunktion mit einem Satz angeben können:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;