Creative Saplings

OPPDATERING

januar 29, 2021
No Comments

Formål

Bruk setningen UPDATE for å endre eksisterende verdier i en tabell eller i basistabellen for en visning eller hovedtabellen for en materialisert visning.

Ytterligere emner

  • Forutsetninger

  • Syntaks

  • Semantics

  • Eksempler

Forutsetninger

For for å oppdatere verdier i en tabell, må tabellen være i ditt eget skjema, eller du må ha UPDATE objektrettighet på bordet.

For at du skal oppdatere verdier i basistabellen for en visning:

  • Du må ha UPDATE objektrettighet på visningen, og

  • Den som eier skjemaet som inneholder visningen, må ha UPDATE objektrettighet på basetabellen.

UPDATE ANY TABLE systemrettighet lar deg også oppdatere verdier i alle bord eller i bunnbordet av hvilken som helst visning.

Du må også ha SELECT objektrettighet på objektet du vil oppdatere hvis:

  • Objektet er i en ekstern database eller

  • SQL92_SECURITY initialiseringsparameteren er satt til TRUE og UPDATE -operasjonen refererer til tabellkolonner, for eksempel kolonnene i en where_clause.

Syntaks

oppdatering :: =

Beskrivelse av illustrasjonen update.gif

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

DML_table_expression_clause :: =

Beskrivelse av illustrasjonen DML_table_expression_clause.gif

(underforespørsel :: = – del av SELECT, subquery_restriction_clause :: =, table_collection_expression :: =)

subquery_restriction_clause :: =


Beskrivelse av illustrasjonen subquery_restriction_clause.gif

table_collection_expression :: =


Beskrivelse av illustrasjonen table_collection_expression.gif

update_set_clause :: =


Beskrivelse av illustrasjonen update_set_clause. gif

where_clause :: =


Beskrivelse av illustrasjonen where_clause.gif

retur_clause :: =


Beskrivelse av illustrasjonen returner_clause.gif

error_logging_clause :: =

Beskrivelse av illustrasjonen error_logging_clause.gif

Semantikk

hint

Spesifiser en kommentar som sender instruksjoner til optimalisereren om å velge en utførelsesplan for uttalelsen.

Du kan plassere et parallelt hint umiddelbart etter UPDATE søkeordet for å parallellisere begge de under liggende skanning og UPDATE operasjoner.

Se også:

  • Oracle Database Performance Tuning Guide and » Bruk av hint «for syntaksen og beskrivelsen av hint

  • Oracle Database Performance Tuning Guide og Oracle Database Concepts for detaljert informasjon om parallell DML

DML_table_expression_clause

ONLY klausulen gjelder bare visninger. Spesifiser ONLY syntaksen hvis visningen i UPDATE -satsen er en visning som tilhører et hierarki og du ikke vil oppdatere rader fra noen av undervisningene.

Se også:

«Restriksjoner på DML_table_expression_clause» og «Oppdatering av en tabell: eksempler»

skjema

Spesifiser skjemaet som inneholder objektet som skal oppdateres. Hvis du utelater schema, antar databasen at objektet er i ditt eget skjema.

tabell | visning | materialized_view | subquery

Angi navnet på tabellen, visningen, materialiserte visningen eller kolonnene som returneres av et underspørsmål som skal oppdateres. Å utstede en UPDATE uttalelse mot en tabell utløser alle UPDATE utløsere tilknyttet tabellen.

  • Hvis du angir view, oppdaterer databasen basistabellen for visningen.Du kan ikke oppdatere en visning unntatt med INSTEAD OF utløser hvis den definerende spørringen i visningen inneholder en av følgende konstruksjoner:

En settoperator ADISTINCToperator En samlet eller analytisk funksjon AGROUPBY,ORDERBY,MODEL,CONNECTBY, ellerSTARTWITHledd Et samlingsuttrykk i enSELECTliste Et delspørring i enSELECTliste Et delspørsmål betegnetWITH READ ONLYBlir med, med noen unntak , som dokumentert i Oracle Database Administrator’s Guide

  • Du kan ikke oppdatere mer enn en basetabell gjennom en visning.

  • I tillegg, hvis visningen ble opprettet med WITH CHECK , så kan du bare oppdatere visningen hvis de resulterende dataene tilfredsstiller visningens definerende spørsmål.

  • Hvis table eller basistabellen til view inneholder en eller flere domeneindekskolonner, så utfører denne setningen den aktuelle oppdateringsrutinen for innekstype.

  • Du kan ikke oppdatere rader i en skrivebeskyttet materialvisning. Hvis du oppdaterer rader i en skrivbar materialisert visning, oppdaterer databasen radene fra den underliggende containertabellen. Oppdateringene blir imidlertid overskrevet ved neste oppdateringsoperasjon. Hvis du oppdaterer rader i en oppdaterbar materialisert visning som er en del av en materialisert visningsgruppe, oppdaterer databasen også de tilsvarende radene i mastertabellen.

Se Også:

  • Oracle Data Cartridge Developer’s Guide for mer informasjon om oppdateringsrutinene for uavhengig type

  • CREATE MATERIALIZED VIEW for informasjon om lage oppdaterbare materialiserte visninger

PARTITION | DELING

Spesifiser navnet på partisjonen eller underpartisjonen i table målrettet for oppdateringer. Du trenger ikke spesifisere partisjonsnavnet når du oppdaterer verdier i en partisjonert tabell. I noen tilfeller kan det imidlertid være mer effektivt å spesifisere partisjonsnavnet enn en komplisert where_clause .

Se også:

«Henvisning til partisjonerte tabeller og indekser» og «Oppdatering av en partisjon: Eksempel»

dblink

Spesifiser et helt eller delvis navn på en databasekobling til en ekstern database der t objektet er lokalisert. Du kan bare bruke en databasekobling til å oppdatere et eksternt objekt hvis du bruker Oracle Database-distribuert funksjonalitet.

Hvis du utelater dblink,, antar databasen at objektet er på den lokale databasen.

Se også:

«Henvisning til objekter i eksterne databaser» for informasjon om henvisning til databasekoblinger

subquery_restriction_clause

Bruk subquery_restriction_clause for å begrense underforespørselen på en av følgende måter:

MED LES KUN Angi WITH READ ONLY for å indikere at tabellen eller visningen ikke kan oppdateres.

MED CHECK-ALTERNATIV Spesifiser WITH CHECK OPTION for å indikere at Oracle Database forbyder endringer i tabellen eller visningen som vil produsere rader som ikke er inkludert i undersøket. Når det brukes i undersøket til en DML-setning, kan du spesifisere denne klausulen i en underspørsel i FROM klausulen, men ikke i underspørringen i WHERE paragraf.

CONSTRAINT-begrensning Angi navnet på CHECK OPTION -begrensningen. Hvis du utelater denne identifikatoren, tildeler Oracle automatisk begrensningen et navn på skjemaet SYS_C n, der n er et heltall som gjør begrensningsnavn unikt i databasen.

Se også:

«Bruk av WITH CHECK OPTION-klausulen: Eksempel»

table_collection_expression

The table_collection_expression lar deg informere Oracle om at verdien til collection_expression skal behandles som en tabell for spørsmål og DML-operasjoner. collection_expression kan være et underspørring, en kolonne, en funksjon eller en samlekonstruktør. Uansett form, må den returnere en samlingsverdi – det vil si en verdi hvis type er nestet tabell eller variasjon. Denne prosessen med å trekke ut elementene i en samling kalles samling unnesting.

Det valgfrie pluss (+) er relevant hvis du blir med i TABLE uttrykket med foreldrene bord. + Skaper en ytre sammenføyning av de to, slik at spørringen returnerer rader fra den ytre tabellen selv om samleuttrykket er null.

Merk:

I tidligere versjoner av Oracle, når collection_expression var et underforespørsel, ble table_collection_expression uttrykt som THE subquery.Denne bruken er nå avviklet.

Du kan bruke en table_collection_expression for å oppdatere rader i en tabell basert på rader fra en annen tabell. For eksempel kan du rulle opp fire kvartalsvise salgstabeller til en årlig salgstabell.

t_alias

Angi et korrelasjonsnavn (alias) for tabellen, visningen eller underspørringen som det skal refereres til andre steder i uttalelsen. Dette aliaset kreves hvis DML_table_expression_clause refererer til objekttypeattributter eller objekttypemetoder.

Se også:

«Korrelert oppdatering: Eksempel «

Begrensninger for DML_table_expression_clause Denne paragrafen er underlagt følgende begrensninger:

  • Du kan ikke utføre denne setningen hvis table eller basistabellen til view inneholder eventuelle domeneindekser merket IN_PROGRESS eller FAILED.

  • Du kan ikke sette inn i en partisjon hvis noen berørte indekspartisjoner er merket UNUSABLE.

  • Du kan ikke spesifisere order_by_clause i undersøket til DML_table_expression_clause.

  • Hvis du spesifiserer en indeks, indekspartisjon eller indeksunderdeling som er merket UNUSABLE, vil UPDATE -utsagnet mislykkes med mindre SKIP_UNUSABLE_INDEXES øktparameter er satt til TRUE.

Se også:

ALTER SESSION for informasjon om SKIP_UNUSABLE_INDEXES øktparameter

update_set_clause

update_set_clause lar deg angi kolonneverdier.

kolonne

Angi navnet på en kolonne for objektet som skal oppdateres. Hvis du utelater en kolonne i tabellen fra update_set_clause, forblir verdien til den kolonnen uendret.

Hvis column refererer til et LOB-objektattributt, så må du først initialisere det med verdien tom eller null. Du kan ikke oppdatere den med en bokstavelig. Også, hvis du oppdaterer en LOB-verdi ved hjelp av en annen metode enn en direkte UPDATE SQL-setning, må du først låse raden som inneholder LOB. Se for_update_clause for mer informasjon.

Hvis column er en del av partisjoneringsnøkkelen til en partisjonert tabell, så UPDATE mislykkes hvis du endrer en verdi i kolonnen som vil flytte raden til en annen partisjon eller underpartisjon, med mindre du aktiverer radbevegelse. Vennligst referer til row_movement_clause av CREATE TABLE eller ALTER TABLE.

I tillegg, hvis column er en del av partisjoneringsnøkkel i en listepartisjonert tabell, vil UPDATE mislykkes hvis du angir en verdi for kolonnen som ikke allerede finnes i partition_value liste over en av partisjonene.

delspørring

Angi et delspørring som returnerer nøyaktig en rad for hver oppdaterte rad.

  • Hvis du bare angir en kolonne i update_set_clause, så kan undersøket bare returnere en verdi.

  • Hvis du spesifiserer flere kolonner i update_set_clause, så må spørringen returnere så mange verdier som du har angitt kolonner.

  • Hvis underspørringen returnerer ingen rader, så kolonnen er tildelt en null.

  • Hvis denne subquery refererer til eksterne objekter, så UPDATE operasjon kan kjøre parallelt så lenge referansen ce løper ikke tilbake til et objekt i den lokale databasen. Imidlertid, hvis subquery i DML_table_expression_clause refererer til eventuelle eksterne objekter, så UPDATE operasjonen vil kjøre serielt uten varsel.

Du kan bruke flashback_query_clause i undersøket for å oppdatere table med tidligere data. Se flashback_query_clause av SELECT for mer informasjon om denne paragrafen.

Se også:

  • VELG og «Bruke underforespørsler»

  • parallel_clause i CREATE TABLE documentation

expr

Angi et uttrykk som svarer til den nye verdien som er tilordnet den tilsvarende kolonnen.

Se også:

Kapittel 6, «Uttrykk» for syntaksen til expr og «Oppdatering av en objekttabell: Eksempel»

STANDARD Angi DEFAULT for å sette kolonnen til verdien som er angitt som standard verdi for kolonnen. Hvis det ikke er angitt noen standardverdi for den tilsvarende kolonnen, setter databasen kolonnen til null.

Begrensning for oppdatering til standardverdier Du kan ikke angi DEFAULT hvis du oppdaterer en visning.

VALUE-klausul

VALUE -klausulen lar deg spesifisere hele raden i en objekttabell.

Begrensning på VALUE-setningen Du kan bare spesifisere denne setningen for en objekttabell.

Merk:

Hvis du setter inn strenglitteraler i en RAW -kolonne, vil Oracle Database under påfølgende spørsmål utføre en fullstendig tabellskanning i stedet for å bruke noen indeks som kan finnes i RAW -kolonnen.

Se også:

«Oppdatere en objekttabell: Eksempel»

hvor_clause

where_clause lar deg begrense radene som er oppdatert til de angitte condition er sant. Hvis du utelater denne paragrafen, oppdaterer databasen alle radene i tabellen eller visningen. Se kapittel 7, «Betingelser» for syntaksen til condition.

where_clause bestemmer radene i hvilke verdier som oppdateres. Hvis du ikke spesifiserer where_clause, oppdateres alle radene. For hver rad som tilfredsstiller where_clause, blir kolonnene til venstre for likhetsoperatoren (=) i update_set_clause satt til verdiene av de tilsvarende uttrykkene til høyre for operatøren. Uttrykkene blir evaluert etter hvert som raden oppdateres.

retur_klausul

Returklausulen henter radene som er berørt av en DML-setning. Du kan spesifisere denne klausulen for tabeller og materialiserte visninger og for visninger med en enkelt basetabell.

Når du opererer på en enkelt rad, en DML-setning med en returning_clause kan hente kolonneuttrykk ved hjelp av den berørte raden, rowid og REFs til den berørte raden og lagre dem i vertsvariabler eller PL / SQL-variabler.

Når du bruker flere rader, lagrer en DML-setning med returning_clause verdier fra uttrykk, rowids og REFs som involverer de berørte radene i bindingsarrayer.

expr Hvert element i expr -listen må være en gyldig uttrykkssyntaks.

INN INTO ledd indikerer at verdiene til de endrede radene skal lagres i variabelen (e) spesifisert i data_item liste.

data_item Hver data_item er en vertsvariabel eller PL / SQL-variabel som lagrer den hentede expr -verdien.

For hvert uttrykk i RETURNING -listen, må du angi en tilsvarende typekompatibel PL / SQL-variabel eller vertsvariabel i INTO liste.

Begrensninger Følgende begrensninger gjelder for RETURNING -klausulen:

  • expr er begrenset som følger:

    • For UPDATE og DELETE utsagn hver expr må være et enkelt uttrykk eller et enkelt sett samlet funksjonsuttrykk. Du kan ikke kombinere enkle uttrykk og enkeltsett samlede funksjonsuttrykk i samme returning_clause. For INSERT utsagn må hver expr være et enkelt uttrykk. Aggregerte funksjoner støttes ikke i en INSERT uttalelse RETURNING klausul.

    • Enkelt- angitte samlede funksjonsuttrykk kan ikke inkludere DISTINCT søkeordet.

  • Hvis expr -listen inneholder en primærnøkkelkolonne eller annen NOT NULL -kolonne, så mislykkes oppdateringsuttalelsen hvis tabellen har en BEFORE UPDATE utløser definert på den.

  • Du kan ikke spesifisere returning_clause for et multitasjonsinnlegg.

  • Du kan ikke bruke denne paragrafen med parallell DML eller med eksterne objekter.

  • Du kan ikke hente LONG -typer med denne paragrafen.

  • Du kan ikke spesifisere denne paragrafen for en visning som en INSTEAD OF utløser er definert.

Se også :

PL / SQL-bruker » s Veiledning og referanse for informasjon om bruk av BULK COLLECT klausul for å returnere flere verdier til samlingsvariabler

error_logging_clause

Error_logging_clause har samme oppførsel i en UPDATE uttalelse som den gjør i en INSERT uttalelse. Se INSERT utsagn error_logging_clause for mer informasjon.

Se også:

«Sette inn i en tabell med feillogging: Eksempel»

Eksempler

Oppdatere en tabell: Eksempler Følgende uttalelse gir null oppdrag til alle ansatte med jobben SH_CLERK:

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

Følgende uttalelse promoterer Douglas Grant til leder avdeling 20 med $ 1000-økning:

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

Følgende uttalelse øker lønnen til en ansatt i employees tabellen i remote -databasen:

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

Neste eksempel viser følgende syntaktiske konstruksjoner av UPDATE uttalelse:

  • Begge former for update_set_clause sammen i en enkelt uttalelse

  • Et korrelert underforespørsel

  • A where_clause for å begrense de oppdaterte radene

Den forrige UPDATE uttalelsen utfører følgende operasjoner:

  • Oppdaterer bare de ansatte som jobber i Genève eller München (sted 2900 og 2700)

  • Sett department_id for disse ansatte til department_id som tilsvarer Bombay (location_id 2100)

  • Angir lønn for hver ansatt til 1,1 ganger gjennomsnittlig lønn for avdelingen deres

  • Angir hver ansattes provisjon til 1,5 ganger gjennomsnittlig provisjon for deres avdeling

Oppdatering av en partisjon: Eksempel Følgende eksempel oppdaterer verdier i en enkelt partisjon av sales -tabellen:

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

Oppdatering av en objekttabell: Eksempel Følgende utsagn oppretter to objekttabeller, people_demo1 og people_demo2 , av people_typ -objektet opprettet i Tabellsamlinger: Eksempler. Eksemplet viser hvordan du oppdaterer en rad med people_demo1 ved å velge en rad fra people_demo2:

Eksemplet bruker VALUE objektreferansefunksjon i både SET -satsen og underforespørselen.

Korrelert oppdatering: Eksempel For et eksempel som bruker et korrelert underforespørsel for å oppdatere nestede tabellrader, se «Tabellsamlinger: Eksempler».

Bruke RETURNING-klausulen under OPPDATERING: Eksempel Følgende eksempel returnerer verdier fra den oppdaterte raden og lagrer resultatet i PL / SQL-variabler bnd1, bnd2, bnd3:

The følgende eksempel viser at du kan spesifisere en samlet sett aggregatfunksjon i uttrykket for den returnerende setningen:

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

Articles
Previous Post

Handle USAs nettbutikker og vi sender til India om 2-4 dager!

Next Post

Blå hunderaser - Hva gjør dem så vakre?

Legg igjen en kommentar Avbryt svar

Siste innlegg

  • De beste fotografiskolene i verden, 2020
  • Suverene borgere tar sin regjeringsfilosofi til veiene
  • Veiledning for stukkaturreparasjon
  • Muckrakers (Norsk)
  • Precision Oncology (Norsk)

Arkiv

  • februar 2021
  • januar 2021
  • desember 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.