Creative Saplings

UPDATE (Deutsch)

Januar 29, 2021
No Comments

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 auf TRUE und die Operation UPDATE verweisen auf Tabellenspalten, z. B. die Spalten in einer where_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 mit INSTEAD OF -Triggern aktualisieren, wenn die definierende Abfrage der Ansicht eines der folgenden Konstrukte enthält:

Ein Mengenoperator ADISTINCTOperator Eine Aggregat- oder Analysefunktion AGROUPBY,ORDERBY,MODEL,CONNECTBYoderSTARTWITHKlausel Ein Sammlungsausdruck in aSELECTListe Eine Unterabfrage in einerSELECTListe Eine Unterabfrage mit der BezeichnungWITH READ ONLYJoins, 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 von view 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 von view enthält alle Domänenindizes, die mit IN_PROGRESS oder FAILED 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 der DML_table_expression_clause angeben.

  • Wenn Sie einen Index, eine Indexpartition oder eine Indexunterpartition angeben, die als UNUSABLE markiert wurde, schlägt die Anweisung UPDATE fehl, es sei denn, die SKIP_UNUSABLE_INDEXES Sitzungsparameter wurde auf TRUE 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 die UPDATE 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 die subquery in der DML_table_expression_clause jedoch auf entfernte Objekte bezieht, ist die UPDATE 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 und DELETE Anweisungen Jede expr muss ein einfacher Ausdruck oder ein Aggregatfunktionsausdruck mit einem Satz sein. Sie können einfache Ausdrücke und einzelne Satzaggregatfunktionsausdrücke nicht in derselben returning_clause kombinieren. Für INSERT -Anweisungen muss jede expr ein einfacher Ausdruck sein. Aggregatfunktionen werden in einer INSERT -Anweisung RETURNING -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 andere NOT NULL -Spalte. Die Update-Anweisung schlägt fehl, wenn die Tabelle vorhanden ist Ein darauf definierter BEFORE 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 die department_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;

Articles
Previous Post

Online-Shops in den USA einkaufen und in 2-4 Tagen nach Indien versenden!

Next Post

Blaue Hunderassen - Was macht sie so schön?

Schreibe einen Kommentar Antworten abbrechen

Neueste Beiträge

  • Beste Fotografieschulen der Welt, 2020
  • Souveräne Bürger bringen ihre regierungsfeindliche Philosophie auf die Straße
  • Leitfaden für Stuckreparaturkosten
  • Muckrakers (Deutsch)
  • Präzisionsonkologie

Archive

  • Februar 2021
  • Januar 2021
  • Dezember 2020
  • November 2020
  • Oktober 2020
  • September 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.