PÄIVITÄ
Tarkoitus
Käytä UPDATE
-käskyä muuttaaksesi olemassa olevia arvoja taulukossa tai näkymän perustaulussa tai toteutuneen näkymän päätaulukko.
Lisäaiheet
-
Edellytykset
-
Syntaksi
-
Semantiikka
-
Esimerkkejä
Edellytykset
kun päivität taulukon arvoja, taulukon on oltava omassa skeemassasi tai sinulla on oltava taulukossa objektin etuoikeus UPDATE
.
Päivitettäväksi arvot näkymän perustaulukossa:
-
Sinulla on oltava näkymässä
UPDATE
-objektioikeus ja -
Jokaisella, joka omistaa näkymän sisältävän skeeman, on oltava
UPDATE
-objektioikeus perustaulussa.
Järjestelmän UPDATE
ANY
TABLE
-oikeuden avulla voit myös päivittää arvoja missä tahansa tai taulukossa minkä tahansa näkymän.
Sinulla on oltava myös SELECT
-objektioikeus päivitettävälle objektille, jos:
-
Objekti on etätietokannassa tai
-
SQL92_SECURITY
-alustusparametri on asetettu arvoonTRUE
jaUPDATE
-operaatio viittaa taulukon sarakkeisiin, kuten sarakkeisiinwhere_clause
.
Syntaksi
päivitys :: =
Kuvaesityksen päivitys.gif
(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, returning_clause :: =, error_logging_clause :: =)
DML_table_expression_clause :: =
Kuvan kuvaus DML_table_expression_clause.gif
(alikysely :: = – osa SELECT-osaa, alikyselyn_rajoituksen_lauseke :: =, taulukon_kokoelman_lauseke :: =)
alikyselyn_rajoituksen_lauseke :: =
Kuvan kuvaus subquery_restriction_clause.gif
table_collection_expression :: =
Kuva taulukon_kokoelma_lauseke.gif-kuvaus
update_set_clause :: =
Kuvan kuvaus päivitys-set_clause. gif
where_clause :: =
Kuvan kuvaus where_clause.gif
returning_clause :: =
Kuvan kuvaus returning_clause.gif
error_logging_clause :: =
Kuvan kuvaus error_logging_clause.gif
Semantiikka
vihje
Määritä kommentti joka välittää ohjeet optimoijalle suoritussuunnitelman valitsemisesta käskylle.
Voit sijoittaa rinnakkaisen vihjeen heti UPDATE
-avainsanan peräkkäin molempien alaosien kanssa. valehaku ja UPDATE
-operaatiot.
Katso myös:
-
Oracle Database Performance Tuning Guide and ” Vihjeiden käyttäminen vihjeiden syntaksissa ja kuvauksessa.
-
Oracle Database Performance Tuning Guide and Oracle Database Concepts – yksityiskohtaiset tiedot rinnakkaisesta DML: stä
DML_table_expression_clause
Lauseke ONLY
koskee vain näkymiä. Määritä ONLY
syntaksit, jos lausekkeen UPDATE
näkymä on näkymä, joka kuuluu hierarkiaan, etkä halua päivittää rivejä mistä tahansa sen alikatselmista.
Katso myös:
”Rajoitukset DML_table_expression_clause -lausekkeelle” ja ”Taulukon päivittäminen: Esimerkkejä”
skeema
Määritä kaava, joka sisältää päivitettävän objektin. Jos jätät pois schema
, tietokanta olettaa, että objekti on omassa skeemassasi.
taulukko | näkymä | materialized_view | subquery
Määritä päivitettävän alikyselyn palauttaman taulukon, näkymän, materialisoidun näkymän tai sarakkeiden nimi. UPDATE
-lausekkeen antaminen taulukkoon laukaisee kaikki UPDATE
-taulukot, jotka liittyvät taulukkoon.
-
Jos määrität
view
, tietokanta päivittää näkymän perustaulukon.Näkymää ei voi päivittää, paitsiINSTEAD
OF
-liipaisuilla, jos näkymän määrittävä kysely sisältää jonkin seuraavista rakenteista:
Joukko-operaattori ADISTINCT
-operaattori Aggregaatti- tai analyyttinen toiminto AGROUP
BY
,ORDER
BY
,MODEL
,CONNECT
BY
taiSTART
WITH
lauseke Kokoelma-lausekeSELECT
lista AlakyselySELECT
-luettelossaWITH READ ONLY
nimetty alakysely liittyy joitain poikkeuksia lukuun ottamatta , kuten dokumentoidaan Oracle Database Administrator’s Guide -oppaassa
-
Et voi päivittää useampaa kuin yhtä perustaulukkoa näkymän kautta.
-
Lisäksi, jos näkymä luotiin
WITH
CHECK
, voit päivittää näkymää vain, jos saadut tiedot täyttävät näkymän määrittävän kyselyn. -
Jos
table
taiview
-taulukko sisältää yhden tai useampia verkkotunnushakemistosarakkeita, ja tämä käsky suorittaa sopivan indextype-päivitysrutiinin. -
Et voi päivittää rivejä vain luku -toteutetussa näkymässä. Jos päivität rivit kirjoitettavissa olevassa materialisoidussa näkymässä, tietokanta päivittää rivit taustalla olevasta säilötaulukosta. Päivitykset korvataan kuitenkin seuraavalla päivitystoiminnolla. Jos päivität rivejä päivitettävässä materialisoidussa näkymässä, joka on osa materialisoitunutta näkymäryhmää, tietokanta päivittää myös vastaavat taulukot.
Katso Lisäksi:
-
Oracle Data Cartridge Developer’s Guide to more for the indextype update routines
-
CREATE MATERIALIZED VIEW for information päivitettävien materialisoitujen näkymien luominen
OSIO | ALAOSA
Määritä osion tai osion nimi ryhmässä table
kohdistettu päivityksiin. Sinun ei tarvitse määrittää osion nimeä, kun päivität arvoja ositetussa taulukossa. Joissakin tapauksissa osion nimen määrittäminen voi kuitenkin olla tehokkaampaa kuin monimutkainen where_clause
.
Katso myös:
”Viittaaminen osioituihin taulukoihin ja hakemistoihin” ja ”Osion päivittäminen: Esimerkki”
dblink
Määritä täydellinen tai osittainen nimi tietokantalinkistä etätietokantaan, jossa t esine sijaitsee. Voit käyttää tietokantalinkkiä etäobjektin päivittämiseen vain, jos käytät Oracle Database -jakelutoimintoa.
Jos jätät pois dblink,
, tietokanta olettaa objektin olevan paikallisesta tietokannasta.
Katso myös:
”Viitaten etätietokantojen objekteihin” tietoja tietokantalinkkeihin viittaamisesta
subquery_restriction_clause
Rajoita alikyselyä subquery_restriction_clause
-toiminnolla jollakin seuraavista tavoista:
VAIN LUE LUE Määritä WITH READ ONLY
osoittaa, että taulukkoa tai näkymää ei voi päivittää.
TARKISTUSVAIHTOEHDOLLA Määritä WITH CHECK OPTION
osoittaaksesi, että Oracle Database kieltää kaikki muutokset taulukossa tai näkymässä rivit, jotka eivät sisälly alakyselyyn. Kun sitä käytetään DML-käskyn alikyselyssä, voit määrittää tämän lauseen alakyselyssä FROM
-lausekkeessa, mutta ei alakyselyssä WHERE
lauseke.
RAJOITUSRAJOITUS Määritä rajoituksen CHECK OPTION
nimi. Jos jätät tämän tunnisteen pois, Oracle määrittää rajoitukselle automaattisesti muodon SYS_C
n
nimen, jossa n on kokonaisluku, joka tekee rajoitteen nimi, joka on ainutlaatuinen tietokannassa.
Katso myös:
”WITH CHECK OPTION -lausekkeen käyttö: Esimerkki”
table_collection_expression
table_collection_expression
avulla voit ilmoittaa Oraclelle, että collection_expression
-arvoa tulisi käsitellä taulukkona kysely- ja DML-operaatioita varten. collection_expression
voi olla alikysely, sarake, funktio tai kokoelmarakentaja. Muodosta riippumatta sen on palautettava kokoelma-arvo eli arvo, jonka tyyppi on sisäkkäinen taulukko tai varray. Tätä kokoelman elementtien purkamisprosessia kutsutaan kokoelman poistamiseksi.
Valinnainen plus (+) on merkityksellinen, jos yhdistät lausekkeen TABLE
vanhemman kanssa pöytä. + Luo molempien ulomman liitoksen niin, että kysely palauttaa rivit ulkotaulusta, vaikka kokoelma-lauseke on tyhjä.
Huomaa:
Oraclen aiemmissa julkaisuissa kun collection_expression
oli alakysely, table_collection_expression
ilmaistiin muodossa THE
subquery
.Tämä käyttö on nyt poistettu käytöstä.
Voit päivittää rivejä taulukossa table_collection_expression
käyttämällä toisen taulukon rivejä. Voit esimerkiksi koota neljä neljännesvuosittaista myyntitaulukkoa vuotuiseksi myyntitaulukoksi.
t_alias
Määritä viitetaulukolle, näkymälle tai alikyselylle korrelaation nimi (alias). muualla lausunnossa. Tämä alias vaaditaan, jos DML_table_expression_clause
viittaa mihin tahansa objektityypin määritteeseen tai objektityypin menetelmään.
Katso myös:
”Vastaava päivitys: Esimerkki ”
Rajoitukset DML_table_expression_clause-lauseeseen Tähän lausekkeeseen sovelletaan seuraavia rajoituksia:
-
Et voi suorittaa tätä lausetta, jos
table
taiview
-taulukko sisältää kaikki verkkotunnushakemistot, jotka on merkittyIN_PROGRESS
taiFAILED
. -
Et voi lisätä osioon, jos jokin asiaankuuluva hakemisto-osio on merkitty
UNUSABLE
. -
Et voi määrittää
order_by_clause
-tietoaDML_table_expression_clause
-alikyselyssä. -
Jos määrität indeksin, hakemisto-osion tai hakemisto-osion, joka on merkitty
UNUSABLE
, niin lausekeUPDATE
epäonnistuu, elleiSKIP_UNUSABLE_INDEXES
istunnon parametri on asetettu arvoonTRUE
.
Katso myös:
ALTER SESSION lisätietoja SKIP_UNUSABLE_INDEXES
istunnon parametri
update_set_clause
update_set_clause
antaa sinun asettaa sarakearvoja.
sarake
Määritä päivitettävän objektin sarakkeen nimi. Jos jätät taulukon sarakkeen pois update_set_clause
-kohdasta, kyseisen sarakkeen arvo pysyy muuttumattomana.
Jos column
viittaa LOB-objekti-määritteeseen, ja sinun on ensin alustettava se arvolla tyhjä tai tyhjä. Et voi päivittää sitä kirjaimella. Lisäksi, jos päivität LOB-arvoa jollakin muulla menetelmällä kuin suoralla UPDATE
SQL-käskyllä, sinun on ensin lukittava LOB sisältävä rivi. Lisätietoja on kohdassa for_update_clause.
Jos column
on osa ositetun taulukon osiointiavain, niin UPDATE
epäonnistuu, jos muutat arvoa sarakkeessa, joka siirtää rivin toiseen osioon tai aliosioon, ellet ota rivin liikettä käyttöön. Katso kohta Luo taulukko tai Vaihda taulukko row_movement_clause
.
Lisäksi, jos column
on osa osioitu avain luettelo-osioiduista taulukoista, sitten UPDATE
epäonnistuu, jos määrität sarakkeelle arvon, jota ei vielä ole partition_value
yhden osion luettelo.
alakysely
Määritä alakysely, joka palauttaa täsmälleen yhden rivin kutakin päivitettyä riviä kohti.
-
Jos määrität vain yhden sarakkeen
update_set_clause
, alikysely voi palauttaa vain yhden arvon. -
Jos määrität useita sarakkeita
update_set_clause
, alikyselyn on palautettava niin monta arvoa kuin olet määrittänyt sarakkeet. -
Jos alakysely ei palauta rivejä, sarakkeelle on määritetty nolla.
-
Jos tämä
subquery
viittaa etäobjekteihin, niinUPDATE
-toiminto voi toimia rinnakkain niin kauan kuin referen ce ei palaa takaisin paikallisen tietokannan objektiin. Jos kuitenkinsubquery
kohdassaDML_table_expression_clause
viittaa mihin tahansa etäobjektiin, niinUPDATE
toiminto suoritetaan sarjaan ilman ilmoitusta.
Voit käyttää flashback_query_clause
-alikyselyn sisällä päivittääksesi table
aiempien tietojen kanssa. Katso lisätietoja lausekkeesta SELECT
: n flashback_query_clause-osiosta.
Katso myös:
-
SELECT ja ”Alakyselyjen käyttäminen”
-
parallel_clause CREATE TABLE -dokumentaatiossa
expr
Määritä lauseke, joka ratkaisee vastaavalle sarakkeelle määritetyn uuden arvon.
Katso myös:
Luku 6, ”lausekkeet” expr
ja ”Objektitaulukon päivittäminen: Esimerkki”
OLETUS Määritä DEFAULT
määrittääksesi sarakkeen aiemmin oletusarvoksi määritetyn arvon arvo sarakkeelle. Jos vastaavalle sarakkeelle ei ole määritetty oletusarvoa, tietokanta asettaa sarakkeen nollaksi.
Rajoitus päivittää oletusarvoihin Et voi määrittää DEFAULT
jos päivität näkymää.
VALUE-lauseke
VALUE
-lausekkeen avulla voit määrittää objektitaulukon koko rivin.
Rajoitus VALUE-lausekkeelle Voit määrittää tämän lauseen vain objektitaulukolle.
Huomaa:
Jos lisäät merkkijonolitraa RAW
-sarakkeeseen, seuraavien kyselyjen aikana Oracle Database tarkistaa koko taulukon eikä käytä mitään hakemistoja, jotka voivat olla RAW
-sarakkeessa.
Katso myös:
”Objektitaulukon päivittäminen: Esimerkki”
where_clause
where_clause
antaa sinun rajoittaa päivitetyt rivit niille, joille määritetty condition
on totta. Jos jätät tämän lausekkeen pois, tietokanta päivittää kaikki taulukon tai näkymän rivit. Katso luvun condition
syntaksia luvusta 7, ”Ehdot”.
where_clause
määrittää rivit mitkä arvot päivitetään. Jos et määritä where_clause
, kaikki rivit päivitetään. Jokaiselle riville, joka täyttää where_clause
-arvon, sarakkeet, jotka ovat tasa-arvooperaattorin (=) vasemmalla puolella update_set_clause
-kohdassa, asetetaan arvoiksi operaattorin oikealla puolella olevista vastaavista ilmaisuista. Lausekkeet arvioidaan riviä päivitettäessä.
returning_clause
Palautuslauseke hakee rivit, joihin DML-käsky vaikuttaa. Voit määrittää tämän lauseen taulukoille ja toteutuneille näkymille sekä näkymille, joilla on yksi perustaulukko.
Kun käytetään yhtä riviä, DML-käsky, jonka returning_clause
voi noutaa sarakelausekkeet käyttämällä kyseistä riviä, rowidia ja REFs
kyseiselle riville ja tallentaa ne isäntämuuttujiin tai PL / SQL-muuttujiin.
Kun käytät useita rivejä, DML-käsky, jonka returning_clause
tallentaa lausekkeiden, rivien ja REFs
arvot lausekkeista, joihin asianomaiset rivit sisältyvät sidosryhmiin.
lausekkeen Jokaisen expr
-luettelon kohteen on oltava kelvollinen lausekkeen syntakse.
INTO INTO
-lauseke osoittaa, että muutettujen rivien arvot on tallennettava data_item
-luettelossa määritettyihin muuttujiin.
data_item Jokainen data_item
on isäntämuuttuja tai PL / SQL-muuttuja, joka tallentaa haetun expr
-arvon.
Jokaiselle RETURNING
-luettelon lausekkeelle sinun on määritettävä vastaava tyyppinen PL / SQL-muuttuja tai isäntämuuttuja INTO
luettelo.
Rajoitukset Seuraavia rajoituksia sovelletaan lausekkeeseen RETURNING
:
-
expr
on rajoitettu seuraavasti:-
Mille
UPDATE
jaDELETE
lausekkeiden jokaisenexpr
on oltava yksinkertainen lauseke tai yhden joukon aggregaattifunktion lauseke. Et voi yhdistää yksinkertaisia lausekkeita ja yhden joukon yhdistettyjä funktiolausekkeita samaanreturning_clause
.INSERT
-lausekkeiden jokaisenexpr
on oltava yksinkertainen lauseke. Koostefunktioita ei tueta lausekkeessaINSERT
-lausekeRETURNING
. -
Yksittäiset joukko funktiolausekkeita ei voi sisältää avainsanaa
DISTINCT
.
-
-
Jos
expr
-luettelo sisältää ensisijaisen avaimen sarakkeen tai muunNOT
NULL
-sarakkeen, sitten päivityslauseke epäonnistuu, jos taulukossa on siihen määritettyBEFORE
UPDATE
-liipaisin. -
Et voi määrittää
returning_clause
monikäyttöiselle lisäykselle. -
Tätä lauseketta ei voi käyttää rinnakkaisen DML: n tai etäobjektien kanssa.
-
Et voi hakea
LONG
-tyyppejä tällä lausekkeella. -
Et voi määrittää tätä lausetta näkymälle, jolle
INSTEAD
OF
-liipaisin on määritetty.
Katso myös :
PL / SQL-käyttäjä ” s Opas ja viite BULK
COLLECT
-lausekkeen käytöstä useiden arvojen palauttamiseksi kokoelmamuuttujille
error_logging_clause
Error_logging_clause käyttäytyy UPDATE
-lausekkeessa samalla tavalla kuin lausekkeessa INSERT
. Katso lisätietoja INSERT
-lausekkeesta error_logging_clause.
Katso myös:
”Lisääminen taulukkoon virheiden kirjaamisen kanssa: Esimerkki”
Esimerkkejä
Taulukon päivittäminen: Esimerkkejä Seuraavat -lauseke antaa tyhjäpalkkiot kaikille työntekijöille, joilla on työpaikka SH_CLERK
:
UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";
Seuraava lauseke ylentää Douglas-apurahaa johtajalle osastolta 20 1000 dollarin korotuksella:
UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant";
Seuraava lause lisää työntekijän palkkaa employees
taulukko remote
-tietokannassa:
UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";
Seuraava esimerkki näyttää seuraavat UPDATE
-lauseke:
-
update_set_clause
: n molemmat muodot yhdessä lauseessa -
Vastaava alakysely
-
A
where_clause
päivitettyjen rivien rajoittamiseksi
Edeltävä UPDATE
-käsky suorittaa seuraavat toiminnot:
-
Päivittää vain työntekijät, jotka työskentelevät Genevessä tai Münchenissä (sijainnit 2900 ja 2700)
-
Asettaa
department_id
näille työntekijöilledepartment_id
, joka vastaa Bombayta (location_id
2100) -
Asettaa jokaisen työntekijän palkan 1,1-kertaiseksi osastonsa keskipalkkaan
-
Asettaa jokaisen työntekijän palkkion 1,5-kertaiseksi osastonsa keskimääräiseen palkkioon
Osion päivittäminen: Esimerkki Seuraava esimerkki päivittää sales
-taulukon yhden osion arvot:
UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;
Objektitaulukon päivittäminen: Esimerkki Seuraava käsky luo kaksi objektitaulukkoa, people_demo1
ja people_demo2
, taulukon kokoelmissa luodun people_typ
-objektin esimerkkejä. Esimerkki osoittaa, kuinka päivitetään people_demo1
-rivi valitsemalla rivi kohdasta people_demo2
:
Esimerkki käyttää VALUE
objektiviittaustoiminto sekä SET
-lausekkeessa että alikyselyssä.
Vastaava päivitys: Esimerkki Esimerkiksi käyttää vastaavaa alakyselyä sisäkkäisten taulukkorivien päivittämiseen, katso ”Taulukkokokoelmat: esimerkkejä”.
PALAUTUS-lausekkeen käyttö päivityksen aikana: Esimerkki Seuraava esimerkki palauttaa päivitetyn rivin arvot ja tallentaa tuloksen PL / SQL-muuttujat bnd1
, bnd2
, bnd3
:
seuraava esimerkki osoittaa, että voit määrittää yhden joukon aggregaattifunktion palautuslausekkeen lausekkeeseen:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;