Creative Saplings

UPPDATERING

januari 29, 2021
No Comments

Syfte

Använd UPDATE för att ändra befintliga värden i en tabell eller i bastabellen för en vy eller mastertabellen för en materialiserad vy.

Ytterligare ämnen

  • Förutsättningar

  • Syntax

  • Semantics

  • Exempel

Förutsättningar

För du att uppdatera värden i en tabell, tabellen måste vara i ditt eget schema eller så måste du ha UPDATE objektbehörighet på bordet.

För att du ska uppdatera värden i en vyns bastabell:

  • Du måste ha UPDATE objektbehörighet i vyn och

  • Den som äger schemat som innehåller vyn måste ha UPDATE objektbehörighet på bastabellen.

Systemet UPDATE ANY TABLE låter dig också uppdatera värden i valfri eller i basbordet av valfri vy.

Du måste också ha SELECT objektbehörighet för objektet du vill uppdatera om:

  • Objektet finns i en fjärrdatabas eller

  • SQL92_SECURITY initialiseringsparametern är inställd på TRUE och UPDATE hänvisar till tabellkolumner, till exempel kolumnerna i en where_clause.

Syntax

uppdatering :: =

Beskrivning av illustrationen update.gif

(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, Returning_clause :: =, error_logging_clause :: =)

DML_table_expression_clause :: =

Beskrivning av illustrationen DML_table_expression_clause.gif

(underfråga :: = – del av SELECT, subquery_restriction_clause :: =, table_collection_expression :: =)

subquery_restriction_clause :: =


Beskrivning av illustrationen subquery_restriction_clause.gif

table_collection_expression :: =


Beskrivning av illustrationen table_collection_expression.gif

update_set_clause :: =


Beskrivning av illustrationen update_set_clause. gif

där_clause :: =


Beskrivning av illustrationen där_clause.gif

retur_clause :: =


Beskrivning av illustrationen returnerar_clause.gif

error_logging_clause :: =

Beskrivning av illustrationen error_logging_clause.gif

Semantik

tips

Ange en kommentar som skickar instruktioner till optimeraren om att välja en exekveringsplan för uttalandet.

Du kan placera en parallell ledtråd direkt efter UPDATE nyckelordet för att parallellisera båda liggande skanning och UPDATE -operationer.

Se även:

  • Oracle Database Performance Tuning Guide och ” Använda råd ”för syntax och beskrivning av tips

  • Oracle Database Performance Tuning Guide och Oracle Database Concepts för detaljerad information om parallell DML

DML_table_expression_clause

ONLY -satsen gäller endast visningar. Ange ONLY syntax om vyn i UPDATE -satsen är en vy som tillhör en hierarki och du inte vill uppdatera rader från någon av dess undervyer.

Se även:

”Begränsningar av DML_table_expression_clause” och ”Uppdatering av en tabell: exempel”

schema

Ange schemat som innehåller objektet som ska uppdateras. Om du utelämnar schema antar databasen att objektet finns i ditt eget schema.

tabell | visa | materialized_view | underfråga

Ange namnet på tabellen, vyn, materialiserad vy eller de kolumner som returneras av en underfråga som ska uppdateras. Att utfärda ett UPDATE uttalande mot en tabell utlöser alla UPDATE utlösare som är associerade med tabellen.

  • Om du anger view uppdaterar databasen bastabellen för vyn.Du kan inte uppdatera en vy förutom med INSTEAD OF triggers om den definierande frågan för vyn innehåller en av följande konstruktioner:

En uppsättningsoperator ADISTINCToperatör En samlad eller analytisk funktion AGROUPBY,ORDERBY,MODEL,CONNECTBY, ellerSTARTWITHklausul Ett samlingsuttryck i enSELECTlista En underfråga i enSELECTlista En underfråga betecknadWITH READ ONLYAnsluter sig, med några undantag , som dokumenterat i Oracle Database Administrator’s Guide

  • Du kan inte uppdatera mer än en bastabell genom en vy.

  • Dessutom, om vyn skapades med WITH CHECK , då kan du bara uppdatera vyn om den resulterande informationen uppfyller vyn som definierar frågan.

  • Om table eller bastabellen för view innehåller en eller flera domänindexkolumner, sedan utför detta uttalande lämplig uppdatering rutin för indextyp.

  • Du kan inte uppdatera rader i en skrivskyddad materialvy. Om du uppdaterar rader i en skrivbar materialiserad vy uppdateras databasen raderna från den underliggande behållartabellen. Uppdateringarna skrivs dock över vid nästa uppdateringsoperation. Om du uppdaterar rader i en uppdaterbar materialiserad vy som ingår i en materialiserad vygrupp, uppdaterar databasen också motsvarande rader i mastertabellen.

Se Också:

  • Oracle Data Cartridge Developer’s Guide för mer information om uppdateringsrutinerna för indextypen

  • CREATE MATERIALIZED VIEW för information om skapa uppdaterbara materialiserade vyer

PARTITION | SUBPARTITION

Ange namnet på partitionen eller underpartitionen inom table riktade för uppdateringar. Du behöver inte ange partitionsnamnet när du uppdaterar värden i en partitionerad tabell. I vissa fall kan det dock vara mer effektivt att ange partitionsnamnet än en komplicerad where_clause .

Se även:

”Med hänvisning till partitionerade tabeller och index” och ”Uppdatera en partition: Exempel”

dblink

Ange ett fullständigt eller partiellt namn på en databaslänk till en fjärrdatabas där t objektet finns. Du kan bara använda en databaslänk för att uppdatera ett fjärrobjekt om du använder Oracle Database-distribuerad funktionalitet.

Om du utelämnar dblink, antar databasen att objektet är på den lokala databasen.

Se även:

”Referera till objekt i fjärradatabaser” för information om hänvisning till databaslänkar

subquery_restriction_clause

Använd subquery_restriction_clause för att begränsa underfrågan på något av följande sätt:

MED ENDAST LÄS Ange WITH READ ONLY för att indikera att tabellen eller vyn inte kan uppdateras.

MED KONTROLLALTERNATIV Ange WITH CHECK OPTION för att indikera att Oracle Database förbjuder ändringar i tabellen eller vyn som skulle ge rader som inte ingår i underfrågan. När den används i underfrågan till ett DML-uttalande kan du ange denna klausul i en underfråga i FROM -satsen men inte i underfrågan i WHERE klausul.

CONSTRAINT-begränsning Ange namnet på CHECK OPTION -begränsningen. Om du utelämnar denna identifierare tilldelar Oracle begränsningen automatiskt ett namn på formuläret SYS_C n, där n är ett heltal som gör begränsningsnamn unikt i databasen.

Se även:

”Använda WITH CHECK OPTION-klausulen: Exempel”

table_collection_expression

table_collection_expression låter dig informera Oracle om att värdet av collection_expression ska behandlas som en tabell för frågor och DML-operationer. collection_expression kan vara en underfråga, en kolumn, en funktion eller en samlingskonstruktör. Oavsett form måste den returnera ett samlingsvärde – det vill säga ett värde vars typ är kapslad tabell eller varray. Denna process för att extrahera elementen i en samling kallas samling otrevlig.

Det valfria plus (+) är relevant om du går med i uttrycket TABLE tabell. + Skapar en yttre koppling av de två, så att frågan returnerar rader från den yttre tabellen även om samlingsuttrycket är null.

Obs:

I tidigare versioner av Oracle, när collection_expression var en underfråga, table_collection_expression uttrycktes som THE subquery.Den användningen har nu upphört att gälla.

Du kan använda en table_collection_expression för att uppdatera rader i en tabell baserat på rader från en annan tabell. Du kan till exempel rulla upp fyra kvartalsförsäljningstabeller till en årlig försäljningstabell.

t_alias

Ange ett korrelationsnamn (alias) för den tabell, vy eller underfråga som ska refereras till någon annanstans i uttalandet. Detta alias krävs om DML_table_expression_clause refererar till attribut av objekttyp eller metod för objekttyp.

Se även:

”Korrelerad uppdatering: Exempel ”

Begränsningar av DML_table_expression_clause Denna klausul är föremål för följande begränsningar:

  • Du kan inte utföra detta uttalande om table eller bastabellen för view innehåller domänindex markerade IN_PROGRESS eller FAILED.

  • Du kan inte infoga i en partition om några berörda indexpartitioner är markerade UNUSABLE.

  • Du kan inte ange order_by_clause i underfrågan till DML_table_expression_clause.

  • Om du anger ett index, en indexpartition eller en indexdelning som har markerats UNUSABLE, kommer UPDATE -uttalandet att misslyckas om inte SKIP_UNUSABLE_INDEXES sessionsparameter har ställts in på TRUE.

Se även:

ALTER SESSION för information om SKIP_UNUSABLE_INDEXES sessionsparameter

update_set_clause

update_set_clause låter dig ställa in kolumnvärden.

kolumn

Ange namnet på en kolumn för objektet som ska uppdateras. Om du utelämnar en kolumn i tabellen från update_set_clause, förblir värdet på den kolumnen oförändrad.

Om column hänvisar till ett LOB-objektattribut, då måste du först initialisera det med värdet tom eller null. Du kan inte uppdatera den med en bokstav. Om du uppdaterar ett LOB-värde med någon annan metod än en direkt UPDATE SQL-sats, måste du först låsa raden som innehåller LOB. Se för_update_clause för mer information.

Om column är en del av partitioneringsnyckeln i en partitionerad tabell, då UPDATE misslyckas om du ändrar ett värde i kolumnen som flyttar raden till en annan partition eller underpartition, såvida du inte aktiverar radrörelse. Se row_movement_clause i CREATE TABLE eller ALTER TABLE.

Dessutom, om column är en del av partitioneringsnyckel i en listadelad tabell, då UPDATE misslyckas om du anger ett värde för kolumnen som inte redan finns i partition_value lista över en av partitionerna.

underfråga

Ange en underfråga som returnerar exakt en rad för varje uppdaterad rad.

  • Om du anger bara en kolumn i update_set_clause, så kan underfrågan bara returnera ett värde.

  • Om du anger flera kolumner i update_set_clause måste underfrågan returnera så många värden som du har angett kolumner.

  • Om underfrågan returnerar inga rader, då kolumn tilldelas en noll.

  • Om denna subquery hänvisar till avlägsna objekt, så UPDATE operation kan köras parallellt så länge som referensen ce går inte tillbaka till ett objekt i den lokala databasen. Men om subquery i DML_table_expression_clause hänvisar till avlägsna objekt, så UPDATE operationen körs utan förvarning.

Du kan använda flashback_query_clause i underfrågan för att uppdatera table med tidigare data. Se flashback_query_clause för SELECT för mer information om denna klausul.

Se även:

  • VÄLJ och ”Använda underfrågor”

  • parallel_clause i CREATE TABLE documentation

expr

Ange ett uttryck som övergår till det nya värdet som tilldelats motsvarande kolumn.

Se även:

Kapitel 6, ”Uttryck” för syntaxen för expr och ”Uppdatera en objekttabell: Exempel”

STANDARD Ange DEFAULT för att ställa in kolumnen till det värde som tidigare angavs som standard värde för kolumnen. Om inget standardvärde för motsvarande kolumn har angetts, sätter databasen kolumnen till noll.

Begränsning för uppdatering till standardvärden Du kan inte ange DEFAULT om du uppdaterar en vy.

VALUE-sats

VALUE -satsen kan du ange hela raden i en objekttabell.

Begränsning av VALUE-satsen Du kan bara ange denna sats för en objekttabell.

Obs:

Om du infogar stränglitteraler i en RAW -kolumn, kommer Oracle Database att göra en fullständig tabellgenomsökning under efterföljande frågor. snarare än att använda något index som kan finnas i kolumnen RAW.

Se även:

”Uppdatera en objekttabell: Exempel”

där_clause

where_clause låter dig begränsa raderna uppdaterade till de för vilka den angivna condition är sant. Om du utelämnar den här klausulen uppdaterar databasen alla rader i tabellen eller vyn. Se kapitel 7, ”Villkor” för syntaxen för condition.

where_clause bestämmer raderna i vilka värden som uppdateras. Om du inte anger where_clause uppdateras alla rader. För varje rad som uppfyller where_clause, är kolumnerna till vänster om likhetsoperatören (=) i update_set_clause inställda på värdena av motsvarande uttryck till höger om operatören. Uttrycken utvärderas när raden uppdateras.

return_clause

Den returnerande klausulen hämtar de rader som påverkas av ett DML-uttalande. Du kan ange denna klausul för tabeller och materialiserade vyer och för vyer med en enda bastabell.

När du arbetar på en enda rad, ett DML-uttalande med returning_clause kan hämta kolumnuttryck med den berörda raden, rowid och REFs till den berörda raden och lagra dem i värdvariabler eller PL / SQL-variabler.

När du arbetar flera rader, ett DML-uttalande med returning_clause lagrar värden från uttryck, rowids och REFs som involverar de berörda raderna i bindningsarrayer.

expr Varje objekt i expr -listan måste vara en giltig uttryckssyntax.

INT INTO klausul anger att värdena på de ändrade raderna ska lagras i variabeln (arna) som anges i data_item -listan.

data_item Varje data_item är en värdvariabel eller PL / SQL-variabel som lagrar det hämtade expr -värdet.

För varje uttryck i RETURNING -listan måste du ange en motsvarande typkompatibel PL / SQL-variabel eller värdvariabel i INTO lista.

Begränsningar Följande begränsningar gäller för RETURNING -satsen:

  • expr begränsas enligt följande:

    • För UPDATE och DELETE uttalanden varje expr måste vara ett enkelt uttryck eller ett enda uppsättningsfunktionsuttryck. Du kan inte kombinera enkla uttryck och samlade funktionsuttryck i en uppsättning i samma returning_clause. För INSERT uttalanden måste varje expr vara ett enkelt uttryck. Aggregerade funktioner stöds inte i en INSERT uttalande RETURNING klausul.

    • Enkel- ange sammanlagda funktionsuttryck kan inte innehålla sökordet DISTINCT.

  • Om expr -listan innehåller en primär nyckelkolumn eller en annan NOT NULL -kolumn, då misslyckas uppdateringsuttrycket om tabellen har en BEFORE UPDATE utlösare definierad på den.

  • Du kan inte ange returning_clause för ett multitabelt inlägg.

  • Du kan inte använda denna klausul med parallell DML eller med fjärrobjekt.

  • Du kan inte hämta LONG -typer med den här klausulen.

  • Du kan inte ange denna klausul för en vy där en INSTEAD OF utlösare har definierats.

Se även :

PL / SQL-användare ” s Guide och referens för information om att använda BULK COLLECT -satsen för att returnera flera värden till samlingsvariabler

error_logging_clause

Error_logging_clause har samma beteende i ett UPDATE -uttalande som i ett INSERT -uttalande. Se INSERT uttalande error_logging_clause för mer information.

Se även:

”Infoga i en tabell med felloggning: Exempel”

Exempel

Uppdatera en tabell: Exempel Följande uttalande ger null uppdrag till alla anställda med jobbet SH_CLERK:

UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";

Följande uttalande främjar Douglas Grant till chef avdelning 20 med en $ 1000-höjning:

UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant"; 

Följande uttalande ökar lönen för en anställd i employees tabell i remote databasen:

UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";

Nästa exempel visar följande syntaktiska konstruktioner av UPDATE uttalande:

  • Båda formerna av update_set_clause tillsammans i ett enda uttalande

  • En korrelerad underfråga

  • A where_clause för att begränsa de uppdaterade raderna

Den föregående UPDATE uttalandet utför följande åtgärder:

  • Uppdaterar endast de anställda som arbetar i Genève eller München (platser 2900 och 2700)

  • Uppsättningar department_id för dessa anställda till department_id motsvarande Bombay (location_id 2100)

  • Ställer in varje anställds lön till 1,1 gånger genomsnittlig lön för deras avdelning

  • Ställer in varje anställds provision till 1,5 gånger den genomsnittliga provisionen för deras avdelning

Uppdatera en partition: Exempel I följande exempel uppdateras värden i en enda partition i sales -tabellen:

UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;

Uppdatera en objekttabell: Exempel Följande uttalande skapar två objekttabeller, people_demo1 och people_demo2 , av people_typ -objektet som skapats i tabellsamlingar: exempel. Exemplet visar hur du uppdaterar en rad med people_demo1 genom att välja en rad från people_demo2:

Exemplet använder VALUE objektreferensfunktion i både SET -satsen och underfrågan.

Korrelerad uppdatering: Exempel För ett exempel som använder en korrelerad underfråga för att uppdatera kapslade tabellrader, se ”Tabellsamlingar: Exempel”.

Använda RETURNING-avsnittet under UPPDATERING: Exempel Följande exempel returnerar värden från den uppdaterade raden och lagrar resultatet i PL / SQL-variabler bnd1, bnd2, bnd3:

följande exempel visar att du kan ange en samlingsfunktion med en uppsättning i uttrycket för den återvändande klausulen:

UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;

Articles
Previous Post

Handla USA-onlinebutiker och vi skickar till Indien på 2-4 dagar!

Next Post

Blå hundraser - Vad gör dem så vackra?

Lämna ett svar Avbryt svar

Senaste inläggen

  • Världens bästa fotoskolor, 2020
  • Suveräna medborgare tar sin regeringsfilosofi mot vägarna
  • Guide för reparation av stuckaturer
  • Muckrakers (Svenska)
  • Precision Oncology (Svenska)

Arkiv

  • februari 2021
  • januari 2021
  • december 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.