Creative Saplings

OPDATER

januar 29, 2021
No Comments

Formål

Brug udsagnet UPDATE til at ændre eksisterende værdier i en tabel eller i basistabellen i en visning eller mastertabellen for en materialiseret visning.

Yderligere emner

  • Forudsætninger

  • Syntaks

  • Semantics

  • Eksempler

Forudsætninger

For dig for at opdatere værdier i en tabel, tabellen skal være i dit eget skema, eller du skal have UPDATE objektrettighed på bordet.

For at du kan opdatere værdier i basistabellen for en visning:

  • Du skal have objektet UPDATE på visningen og

  • Den, der ejer skemaet, der indeholder visningen, skal have objektet UPDATE på basistabellen.

Systemet UPDATE ANY TABLE giver dig også mulighed for at opdatere værdier i enhver bord eller i bundbordet af enhver visning.

Du skal også have objektet SELECT på det objekt, du vil opdatere, hvis:

  • Objektet er i en ekstern database eller

  • SQL92_SECURITY initialiseringsparameteren er indstillet til TRUE og UPDATE -operationen henviser til tabelkolonner, såsom kolonnerne i en where_clause.

Syntaks

opdatering :: =

Beskrivelse af illustrationen update.gif

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

DML_table_expression_clause :: =

Beskrivelse af illustrationen DML_table_expression_clause.gif

(underforespørgsel :: = – del af SELECT, subquery_restriction_clause :: =, table_collection_expression :: =)

subquery_restriction_clause :: =


Beskrivelse af illustrationen subquery_restriction_clause.gif

table_collection_expression :: =


Beskrivelse af illustrationen table_collection_expression.gif

update_set_clause :: =


Beskrivelse af illustrationen update_set_clause. gif

hvor_clause :: =


Beskrivelse af illustrationen hvor_clause.gif

retur_clause :: =


Beskrivelse af illustrationen returnering_clause.gif

error_logging_clause :: =

Beskrivelse af illustrationen error_logging_clause.gif

Semantik

tip

Angiv en kommentar der videresender instruktioner til optimeringsprogrammet om valg af en eksekveringsplan for erklæringen.

Du kan placere et parallelt tip straks efter UPDATE nøgleordet for at parallelisere begge under liggende scanning og UPDATE operationer.

Se også:

  • Oracle Database Performance Tuning Guide og ” Brug af tip “til syntaks og beskrivelse af tip

  • Oracle Database Performance Tuning Guide og Oracle Database Concepts for detaljeret information om parallel DML

DML_table_expression_clause

ONLY -klausulen gælder kun for visninger. Angiv ONLY syntaks, hvis visningen i UPDATE -sætningen er en visning, der hører til et hierarki, og du ikke vil opdatere rækker fra nogen af dets undervisninger.

Se også:

“Begrænsninger på DML_table_expression_clause” og “Opdatering af en tabel: eksempler”

skema

Angiv skemaet, der indeholder det objekt, der skal opdateres. Hvis du udelader schema, antager databasen, at objektet er i dit eget skema.

tabel | visning | materialized_view | underforespørgsel

Angiv navnet på tabellen, visningen, den materialiserede visning eller de kolonner, der returneres af en underforespørgsel, der skal opdateres. Udstedelse af en UPDATE -udtalelse mod en tabel affyrer alle UPDATE -udløsere, der er knyttet til tabellen.

  • Hvis du angiver view, opdaterer databasen basistabellen for visningen.Du kan ikke opdatere en visning undtagen med INSTEAD OF udløser, hvis den definerende forespørgsel for visningen indeholder en af følgende konstruktioner:

En sætoperator ADISTINCToperator En samlet eller analytisk funktion AGROUPBY,ORDERBY,MODEL,CONNECTBYellerSTARTWITHklausul Et samleudtryk i enSELECTliste En underforespørgsel i enSELECTliste En underforespørgsel betegnetWITH READ ONLYDeltager, med nogle undtagelser , som dokumenteret i Oracle Database Administrator’s Guide

  • Du kan ikke opdatere mere end en basistabel gennem en visning.

  • Hvis visning blev oprettet med WITH CHECK , så kan du kun opdatere visningen, hvis de resulterende data opfylder visningens definerende forespørgsel.

  • Hvis table eller basistabellen i view indeholder en eller flere domæneindekskolonner, så denne erklæring udfører den relevante rutine til opdatering af indextype.

  • Du kan ikke opdatere rækker i en skrivebeskyttet materialiseret visning. Hvis du opdaterer rækker i en skrivbar materialiseret visning, opdaterer databasen rækkerne fra den underliggende containertabel. Opdateringerne overskrives dog ved den næste opdateringsoperation. Hvis du opdaterer rækker i en opdateret materialiseret visning, der er en del af en materialiseret visningsgruppe, opdaterer databasen også de tilsvarende rækker i mastertabellen.

Se Også:

  • Oracle Data Cartridge Developer’s Guide for mere information om indextype-opdateringsrutinerne

  • CREATE MATERIALIZED VIEW for information on oprettelse af opdaterbare materialiserede visninger

PARTITION | SUBPARTITION

Angiv navnet på partitionen eller underopdelingen inden for table målrettet mod opdateringer. Du behøver ikke angive partitionsnavnet, når du opdaterer værdier i en partitioneret tabel. I nogle tilfælde kan det dog være mere effektivt at specificere partitionsnavnet end en kompliceret where_clause .

Se også:

“Henvisning til partitionerede tabeller og indekser” og “Opdatering af en partition: Eksempel”

dblink

Angiv et komplet eller delvist navn på et databaselink til en ekstern database, hvor t objektet er placeret. Du kan kun bruge et databaselink til at opdatere et eksternt objekt, hvis du bruger Oracle Database-distribueret funktionalitet.

Hvis du udelader dblink,, antager databasen, at objektet er på den lokale database.

Se også:

“Henvisning til objekter i eksterne databaser” for information om henvisning til databaselinks

subquery_restriction_clause

Brug subquery_restriction_clause til at begrænse underforespørgslen på en af følgende måder:

KUN MED LÆS Angiv WITH READ ONLY for at angive, at tabellen eller visningen ikke kan opdateres.

MED KONTROLMULIGHED Angiv WITH CHECK OPTION for at indikere, at Oracle Database forbyder ændringer i tabellen eller visningen, der ville producere rækker, der ikke er inkluderet i underforespørgslen. Når den bruges i underforespørgslen af en DML-sætning, kan du specificere denne klausul i en underforespørgsel i FROM -klausulen, men ikke i underforespørgslen i WHERE klausul.

CONSTRAINT-begrænsning Angiv navnet på CHECK OPTION -begrænsningen. Hvis du udelader denne identifikator, tildeler Oracle automatisk begrænsningen et navn på formularen SYS_C n, hvor n er et heltal, der gør begrænsningsnavn, der er unikt i databasen.

Se også:

“Brug af WITH CHECK OPTION-klausulen: Eksempel”

table_collection_expression

The table_collection_expression lader dig informere Oracle om, at værdien af collection_expression skal behandles som en tabel med henblik på forespørgsler og DML-operationer. collection_expression kan være en underforespørgsel, en kolonne, en funktion eller en samlingskonstruktør. Uanset dens form skal den returnere en samlingsværdi – det vil sige en værdi, hvis type er indlejret tabel eller varray. Denne proces med at udtrække elementerne i en samling kaldes samling undesting.

Det valgfri plus (+) er relevant, hvis du deltager i TABLE -udtrykket med overordnet bord. + Opretter en ydre sammenføjning af de to, så forespørgslen returnerer rækker fra den ydre tabel, selvom samleudtrykket er nul.

Bemærk:

I tidligere udgivelser af Oracle, når collection_expression var en underforespørgsel, blev table_collection_expression udtrykt som THE subquery.Denne brug er nu udfaset.

Du kan bruge en table_collection_expression til at opdatere rækker i en tabel baseret på rækker fra en anden tabel. For eksempel kan du rulle fire kvartalsvise salgstabeller op i en årlig salgstabel.

t_alias

Angiv et korrelationsnavn (alias) for den tabel, visning eller underforespørgsel, der skal henvises til andetsteds i erklæringen. Dette alias kræves, hvis DML_table_expression_clause refererer til objekttypeattributter eller objekttypemetoder.

Se også:

“Korreleret opdatering: Eksempel “

Begrænsninger for DML_table_expression_clause Denne klausul er underlagt følgende begrænsninger:

  • Du kan ikke udføre denne erklæring, hvis table eller basistabellen i view indeholder domæneindeks markeret IN_PROGRESS eller FAILED.

  • Du kan ikke indsætte i en partition, hvis nogen berørte indekspartitioner er markeret UNUSABLE.

  • Du kan ikke angive order_by_clause i underforespørgslen til DML_table_expression_clause.

  • Hvis du angiver et indeks, indekspartition eller indeksunderpartition, der er markeret UNUSABLE, mislykkes udsagnet UPDATE, medmindre SKIP_UNUSABLE_INDEXES sessionsparameter er indstillet til TRUE.

Se også:

ALTER SESSION for information om SKIP_UNUSABLE_INDEXES sessionsparameter

update_set_clause

update_set_clause giver dig mulighed for at indstille kolonneværdier.

kolonne

Angiv navnet på en kolonne for det objekt, der skal opdateres. Hvis du udelader en kolonne i tabellen fra update_set_clause, forbliver kolonnens værdi uændret.

Hvis column henviser til en LOB-objektattribut, så skal du først initialisere den med værdien tom eller null. Du kan ikke opdatere det med en bogstavelig. Hvis du også opdaterer en LOB-værdi ved hjælp af en anden metode end en direkte UPDATE SQL-sætning, skal du først låse rækken, der indeholder LOB. Se for_update_clause for at få flere oplysninger.

Hvis column er en del af partitioneringsnøglen i en partitioneret tabel, så UPDATE mislykkes, hvis du ændrer en værdi i kolonnen, der flytter rækken til en anden partition eller underpartition, medmindre du aktiverer rækkebevægelse. Der henvises til row_movement_clause i CREATE TABLE eller ALTER TABLE.

Hvis column desuden er en del af partitioneringsnøgle til en listepartitioneret tabel, så UPDATE mislykkes, hvis du angiver en værdi for kolonnen, der ikke allerede findes i partition_value liste over en af partitionerne.

underforespørgsel

Angiv en underforespørgsel, der returnerer nøjagtigt en række for hver opdaterede række.

  • Hvis du angiver kun en kolonne i update_set_clause, så kan underforespørgslen kun returnere en værdi.

  • Hvis du angiver flere kolonner i update_set_clause, så skal underforespørgslen returnere så mange værdier, som du har angivet kolonner.

  • Hvis underforespørgslen returnerer ingen rækker, så kolonnen tildeles en null.

  • Hvis denne subquery henviser til eksterne objekter, så UPDATE operation kan køre parallelt, så længe referencen ce sløjfer ikke tilbage til et objekt i den lokale database. Men hvis subquery i DML_table_expression_clause henviser til eksterne objekter, så UPDATE operation kører serielt uden underretning.

Du kan bruge flashback_query_clause i underforespørgslen til at opdatere table med tidligere data. Se flashback_query_clause af SELECT for mere information om denne klausul.

Se også:

  • VÆLG og “Brug af underforespørgsler”

  • parallel_clause i CREATE TABLE documentation

expr

Angiv et udtryk, der svarer til den nye værdi, der er tildelt den tilsvarende kolonne.

Se også:

Kapitel 6, “Udtryk” for syntaksen for expr og “Opdatering af en objekttabel: Eksempel”

STANDARD Angiv DEFAULT for at indstille kolonnen til den værdi, der tidligere er angivet som standard værdi for kolonnen. Hvis der ikke er angivet nogen standardværdi for den tilsvarende kolonne, indstiller databasen kolonnen til nul.

Begrænsning for opdatering til standardværdier Du kan ikke angive DEFAULT du opdaterer en visning.

VALUE-klausul

VALUE -klausulen giver dig mulighed for at specificere hele rækken i en objekttabel.

Begrænsning på VALUE-klausulen Du kan kun specificere denne klausul for en objekttabel.

Bemærk:

Hvis du indsætter strenglitteraler i en RAW -kolonne, udfører Oracle Database under de efterfølgende forespørgsler en komplet tabel-scanning i stedet for at bruge et indeks, der muligvis findes i RAW -kolonnen.

Se også:

“Opdatering af en objekttabel: Eksempel”

hvor_clause

where_clause lader dig begrænse opdaterede rækker til dem, for hvilke den angivne condition er sandt. Hvis du udelader denne klausul, opdaterer databasen alle rækker i tabellen eller visningen. Se kapitel 7, “Betingelser” for syntaksen for condition.

where_clause bestemmer rækkerne i hvilke værdier opdateres. Hvis du ikke angiver where_clause, opdateres alle rækker. For hver række, der tilfredsstiller where_clause, sættes kolonnerne til venstre for ligningsoperatoren (=) i update_set_clause til værdierne af de tilsvarende udtryk til højre for operatøren. Udtrykkene evalueres, når rækken opdateres.

return_clause

Den returnerende klausul henter de rækker, der er påvirket af en DML-sætning. Du kan specificere denne klausul for tabeller og materialiserede visninger og for visninger med en enkelt basistabel.

Når du opererer på en enkelt række, en DML-sætning med en returning_clause kan hente kolonneudtryk ved hjælp af den berørte række, række og REFs til den berørte række og gemme dem i værtsvariabler eller PL / SQL-variabler.

Når du arbejder på flere rækker, en DML-sætning med returning_clause gemmer værdier fra udtryk, rowids og REFs, der involverer de berørte rækker i bindingsarrays.

expr Hvert element i expr -listen skal være en gyldig udtrykssyntaks.

INN INTO klausul angiver, at værdierne for de ændrede rækker skal gemmes i variablen (erne), der er specificeret i data_item -listen.

data_item Hver data_item er en værtsvariabel eller PL / SQL-variabel, der gemmer den hentede expr -værdi.

For hvert udtryk i RETURNING -listen skal du angive en tilsvarende typekompatibel PL / SQL-variabel eller værtsvariabel i INTO liste.

Begrænsninger Følgende begrænsninger gælder for RETURNING -klausulen:

  • expr er begrænset som følger:

    • For UPDATE og DELETE udsagn hver expr skal være et simpelt udtryk eller et samlet sæt samlet funktionsudtryk. Du kan ikke kombinere enkle udtryk og enkelt-sæt samlede funktionsudtryk i de samme returning_clause. For INSERT udsagn skal hver expr være et simpelt udtryk. Samlede funktioner understøttes ikke i en INSERT -erklæring RETURNING -klausul.

    • Enkelt- indstil samlede funktionsudtryk kan ikke omfatte DISTINCT nøgleordet.

  • Hvis expr listen indeholder en primær nøglekolonne eller en anden NOT NULL kolonne, så mislykkes opdateringserklæringen, hvis tabellen har en BEFORE UPDATE udløser defineret på den.

  • Du kan ikke angive returning_clause til en multitabel indsats.

  • Du kan ikke bruge denne klausul med parallel DML eller med eksterne objekter.

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

  • Du kan ikke specificere denne klausul for en visning, hvor en INSTEAD OF trigger er defineret.

Se også :

PL / SQL-bruger ” s Vejledning og reference for information om brug af BULK COLLECT klausul til at returnere flere værdier til samlingsvariabler

error_logging_clause

Error_logging_clause har samme adfærd i en UPDATE udsagn, som den gør i en INSERT udsagn. Se INSERT udsagn error_logging_clause for at få flere oplysninger.

Se også:

“Indsættelse i en tabel med fejllogning: Eksempel”

Eksempler

Opdatering af en tabel: Eksempler Følgende erklæring giver nul provision til alle medarbejdere med jobbet SH_CLERK:

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

Følgende udsagn fremmer Douglas Grant til manager i afdeling 20 med $ 1.000 hævning:

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

Følgende udsagn øger lønnen til en medarbejder i employees tabel i remote -databasen:

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

Det næste eksempel viser følgende syntaktiske konstruktioner af UPDATE udsagn:

  • Begge former for update_set_clause sammen i en enkelt erklæring

  • En korreleret underforespørgsel

  • A where_clause for at begrænse de opdaterede rækker

Den foregående UPDATE sætning udfører følgende handlinger:

  • Opdaterer kun de ansatte, der arbejder i Genève eller München (placering 2900 og 2700)

  • Sæt department_id for disse medarbejdere til department_id svarende til Bombay (location_id 2100)

  • Indstiller hver medarbejders løn til 1,1 gange gennemsnitslønnen for deres afdeling

  • Indstiller hver medarbejders provision til 1,5 gange den gennemsnitlige provision for deres afdeling

Opdatering af en partition: Eksempel Følgende eksempel opdaterer værdier i en enkelt partition af sales -tabellen:

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

Opdatering af en objekttabel: Eksempel Følgende udsagn opretter to objekttabeller, people_demo1 og people_demo2 , af people_typ -objektet oprettet i tabel samlinger: eksempler. Eksemplet viser, hvordan man opdaterer en række med people_demo1 ved at vælge en række fra people_demo2:

Eksemplet bruger VALUE objektreferencefunktion i både SET -sætningen og underforespørgslen.

Korreleret opdatering: Eksempel For et eksempel, der bruger en korreleret underforespørgsel til at opdatere indlejrede tabelrækker, se “Tabelsamlinger: Eksempler”.

Brug af RETURNING-klausulen under UPDATE: Eksempel Følgende eksempel returnerer værdier fra den opdaterede række og gemmer resultatet i PL / SQL-variabler bnd1, bnd2, bnd3:

følgende eksempel viser, at du kan angive en samlet sæt samlet funktion i udtrykket for den returnerende klausul:

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

Articles
Previous Post

Shop USA onlinebutikker, og vi sender til Indien om 2-4 dage!

Next Post

Blå hunderacer - hvad gør dem så smukke?

Skriv et svar Annuller svar

Seneste indlæg

  • Verdens bedste fotografiskoler, 2020
  • Suveræne borgere tager deres regeringsfilosofi til vejene
  • Guide til reparation af stuk reparationer
  • Muckrakers (Dansk)
  • Precision Oncology

Arkiver

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