UPDATE (Magyar)
Cél
A UPDATE
utasítással módosíthatja a meglévő értékeket egy táblában vagy egy nézet alaptáblájában, vagy a megvalósult nézet főtáblája.
További témák
-
Előfeltételek
-
Szintaxis
-
Semantika
-
Példák
Előfeltételek
Ha frissítenie kell egy táblázat értékeit, akkor a táblának a saját sémájában kell lennie, vagy a UPDATE
objektumjoggal kell rendelkeznie a táblán.
Frissítéshez értékek a nézet alaptáblájában:
-
A nézetben
UPDATE
objektumjogosultsággal kell rendelkeznie, és -
Akinek a nézetet tartalmazó séma a tulajdonosa, annak
UPDATE
objektumjogosultsággal kell rendelkeznie az alaptáblán.
A UPDATE
ANY
TABLE
rendszerjogosultság lehetővé teszi az értékek frissítését bármelyik táblázatban vagy az alaptáblában bármely nézethez.
Szüksége van a SELECT
objektumjogosultságra a frissíteni kívánt objektumon, ha:
-
Az objektum egy távoli adatbázisban található, vagy
-
A
SQL92_SECURITY
inicializálási paraméter értékeTRUE
és aUPDATE
művelet a táblázat oszlopaira hivatkozik, például egywhere_clause
oszlopokra.
Szintaxis
update :: =
Az update.gif ábra leírása
(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, returning_clause :: =, error_logging_clause :: =)
DML_table_expression_clause :: =
Az ábra leírása DML_table_expression_clause.gif
(subquery :: = – a SELECT része, subquery_restriction_clause :: =, table_collection_expression :: =)
subquery_restriction_clause :: =
Az ábra leírása subquery_restriction_clause.gif
table_collection_expression :: =
Az table_collection_expression.gif ábra leírása
update_set_clause :: =
Az update_set_clause ábra leírása. gif
where_clause :: =
Ahol_clause.gif ábra leírása
returning_clause :: =
Az ábra leírása returning_clause.gif
error_logging_clause :: =
Az ábra leírása error_logging_clause.gif
Szemantika
tipp
Megjegyzés megadása amely átadja az optimalizálónak az utasítás végrehajtási tervének kiválasztására vonatkozó utasításokat.
Párhuzamos tippet helyezhet el azonnal a UPDATE
kulcsszó után, hogy párhuzamosítsa mind az alatta lévő fekvő szkennelés és UPDATE
műveletek.
Lásd még:
-
Oracle Database Performance Tuning Guide and ” Tippek használata “a tippek szintaxisához és leírásához
-
Az Oracle Database Performance Tuning Guide és az Oracle Database Concepts a párhuzamos DML-ről szóló részletes információkért
DML_table_expression_clause
A ONLY
záradék csak a nézetekre vonatkozik. Adja meg a ONLY
szintaxist, ha a UPDATE
záradék nézete egy hierarchiához tartozó nézet, és nem kíván sorokat frissíteni alnézeteit.
Lásd még:
“A DML_table_expression_clause korlátozásai” és “A táblázat frissítése: Példák”
séma
Adja meg a frissítendő objektumot tartalmazó sémát. Ha kihagyja a schema
elemet, akkor az adatbázis feltételezi, hogy az objektum a saját sémájában található.
táblázat | nézet | materialized_view | subquery
Adja meg a táblázat, nézet, materializált nézet vagy oszlopok nevét, amelyeket egy frissítendő al lekérdezés adott vissza. UPDATE
utasítás kiadása egy tábla ellen minden UPDATE
triggert kivált a táblához.
-
Ha megadja a
view
elemet, akkor az adatbázis frissíti a nézet alaptábláját.Nem frissíthet nézetet, kivéve aINSTEAD
OF
triggereket, ha a nézet meghatározó lekérdezése a következő konstrukciók egyikét tartalmazza:
A halmaz operátor ADISTINCT
operátor Az A vagy az összesítő vagy elemző függvény AGROUP
BY
,ORDER
BY
,MODEL
,CONNECT
BY
vagySTART
WITH
záradék Gyűjtemény-kifejezés egySELECT
lista ASELECT
listában szereplő allekérdezésWITH READ ONLY
alkérdezés csatlakozik, néhány kivétellel , az Oracle Database Administrator útmutatójában leírtak szerint
-
Egy nézeten keresztül egynél több alaptáblát nem frissíthet.
-
Ezenkívül, ha nézet a
WITH
CHECK
, akkor csak akkor frissítheti a nézetet, ha az így kapott adatok kielégítik a nézet meghatározó lekérdezését. -
Ha
table
vagy aview
alaptáblája egy vagy több tartományindex-oszlopot tartalmaz, akkor ez az utasítás végrehajtja a megfelelő indextype frissítési rutint. -
A csak olvasható materializált nézetben nem lehet frissíteni a sorokat. Ha írható materializált nézetben frissíti a sorokat, akkor az adatbázis frissíti a sorokat az alatta lévő tárolótáblából. A frissítéseket azonban a következő frissítési művelet során felülírják. Ha a materializált nézetcsoport részét képező, frissíthető, materializált nézetben sorokat frissít, akkor az adatbázis a megfelelő táblákat is frissíti a főtáblában.
Lásd Továbbá:
-
Az Oracle Data Cartridge Developer útmutatója további információkért az indextype frissítési rutinokról
-
MATERIALIZÁLT NÉZET LÉTREHOZ frissíthető, materializált nézetek létrehozása
PARTITION | ALRÉSZ
Adja meg a partíció vagy alpartíció nevét a table
célzott a frissítésekhez. A partíciós táblázat értékeinek frissítésekor nem kell megadnia a partíció nevét. Bizonyos esetekben azonban a partíció nevének megadása hatékonyabb lehet, mint egy bonyolult where_clause
.
Lásd még:
“Hivatkozás particionált táblákra és indexekre” és “Partíció frissítése: Példa”
dblink
Adja meg egy adatbázis teljes vagy részleges neve, amely egy távoli adatbázishoz kapcsolódik, ahol t az objektum található. Csak akkor használhat adatbázis-hivatkozást egy távoli objektum frissítésére, ha az Oracle Database elosztott funkcióját használja.
Ha kihagyja a dblink,
elemet, akkor az adatbázis feltételezi, hogy az objektum a helyi adatbázisban.
Lásd még:
“Hivatkozás a távoli adatbázisok objektumaira” az adatbázis-hivatkozásokra való hivatkozásról.
subquery_restriction_clause
A subquery_restriction_clause
paranccsal korlátozhatja az allekérdezést a következő módok egyikével:
CSAK OLVASATAL adja meg a WITH READ ONLY
annak jelzésére, hogy a tábla vagy nézet nem frissíthető.
ELLENŐRZÉSI OPCIÓVAL Adja meg a WITH CHECK OPTION
parancsot annak jelzésére, hogy az Oracle Database tiltja a táblázat vagy nézet minden olyan módosítását, amely előállíthat sorok, amelyek nem szerepelnek az allekérdezésben. Ha egy DML utasítás allekérdezésében használják, akkor ezt a záradékot megadhatja az FROM
záradék egyik allekérdezésében, de a WHERE
záradék.
KORLÁTOZÁSI kényszer Adja meg a CHECK OPTION
kényszer nevét. Ha kihagyja ezt az azonosítót, akkor az Oracle automatikusan hozzárendeli a korlátozáshoz a következő formanyomtatvány nevét: SYS_C
n
, ahol n olyan egész szám, amely az kényszer neve az adatbázisban egyedülálló.
Lásd még:
“A WITH CHECK OPTION záradék használata: Példa”
table_collection_expression
A A table_collection_expression
segítségével tájékoztathatja az Oracle-t arról, hogy az collection_expression
értékét táblázatként kell kezelni a lekérdezés és a DML műveletek céljából. Az collection_expression
lehet allekérdezés, oszlop, függvény vagy gyűjtemény-konstruktor. Formájától függetlenül vissza kell adnia egy gyűjteményértéket – vagyis egy olyan értéket, amelynek típusa beágyazott tábla vagy varray. A gyűjtemény elemeinek kinyerésének ezt a folyamatát hívjuk gyűjtemény-eltávolításnak.
Az opcionális plusz (+) releváns, ha a TABLE
kifejezéshez csatlakozik a szülővel. asztal. A + létrehoz egy külső összekapcsolást a kettőből, így a lekérdezés akkor is visszaadja a sorokat a külső táblából, ha a gyűjtemény kifejezés null.
Megjegyzés:
Az Oracle korábbi verzióiban amikor a collection_expression
részlekérdezés volt, a table_collection_expression
kifejezést a következővel fejezték ki: “>
.Ez a használat már elavult.
A table_collection_expression
segítségével frissítheti az egyik tábla sorait egy másik tábla sorai alapján. Összeállíthat például négy negyedéves értékesítési táblázatot egy éves értékesítési táblázatba.
t_alias
Adjon meg egy korrelációs nevet (álnevet) a hivatkozni kívánt táblához, nézethez vagy allekérdezéshez. a nyilatkozat másutt. Erre az aliasra akkor van szükség, ha a DML_table_expression_clause
bármilyen objektumtípus-attribútumra vagy objektumtípus-módszerre hivatkozik.
Lásd még:
“Kapcsolódó frissítés: Példa “
A DML_table_expression_clause korlátozásai Ez a klauzula a következő korlátozások hatálya alá tartozik:
-
Nem hajthatja végre ezt az utasítást, ha
table
vagy aview
alaptáblája tartalmaz minden olyan tartományi indexet, amelyIN_PROGRESS
vagyFAILED
jelöléssel rendelkezik. -
Nem illeszthető be a partícióba, ha az érintett indexpartíciók
UNUSABLE
jelöléssel vannak ellátva. -
A
order_by_clause
nem adható meg aDML_table_expression_clause
allekérdezésében. -
Ha megad egy indexet, indexpartíciót vagy indexrészpartíciót, amelyet
UNUSABLE
jelöléssel láttak el, akkor aUPDATE
utasítás sikertelen lesz, hacsak aSKIP_UNUSABLE_INDEXES
munkamenet paraméterTRUE
értékre lett állítva.
Lásd még:
ALTER SESSION információkat a SKIP_UNUSABLE_INDEXES
munkamenet paraméter
update_set_clause
Az update_set_clause
segítségével oszlopértékeket állíthat be.
oszlop
Adja meg a frissítendő objektum oszlopának nevét. Ha kihagyja a táblázat oszlopát a update_set_clause
menüből, akkor az oszlop értéke változatlan marad.
Ha column
egy LOB objektum attribútumra utal, akkor először inicializálnia kell üres vagy null értékkel. Nem frissítheti szó szerinti betűvel. Ezenkívül, ha a LOB értékét a közvetlen UPDATE
SQL utasításon kívül más módszerrel frissíti, akkor először le kell zárnia a LOB-ot tartalmazó sort. További információ: for_update_clause.
Ha a column
része a particionált táblák particionálási kulcsának, akkor UPDATE
sikertelen lesz, ha megváltoztat egy értéket az oszlopban, amely áthelyezi a sort egy másik partícióra vagy alpartícióra, hacsak nem engedélyezi a sor mozgatását. Kérjük, olvassa el a CREATE TABLE vagy az ALTER TABLE row_movement_clause
részét.
Ezenkívül, ha a column
része a A felsorolással partíciózott tábla particionálási kulcsa, akkor a UPDATE
nem fog sikerülni, ha olyan értéket ad meg az oszlopnak, amely még nem létezik a partition_value
az egyik partíció listája.
allekérdezés
Adjon meg egy olyan allekérdezést, amely pontosan egy sort ad vissza minden frissített sorhoz.
-
Ha csak egy oszlopot ad meg az
update_set_clause
mezőben, akkor az al lekérdezés csak egy értéket adhat vissza. -
Ha több oszlopot ad meg a
update_set_clause
, akkor az allekérdezésnek annyi értéket kell visszaadnia, amennyit megadott oszlopokkal. -
Ha az alkérdezés nem ad sorokat, akkor a oszlop nullához van rendelve.
-
Ha ez az
subquery
távoli objektumokra vonatkozik, akkor aUPDATE
művelet párhuzamosan futtatható, amíg a referen A ce nem tér vissza a helyi adatbázis objektumához. Ha azonban asubquery
aDML_table_expression_clause
részben bármilyen távoli objektumra utal, akkor aUPDATE
A művelet sorozatosan, értesítés nélkül fog futni.
Használhatja az flashback_query_clause
részt az allekérdezésben az korábbi adatokkal. Kérjük, olvassa el a SELECT
flashback_query_clause cikkét erről a záradékról.
Lásd még:
-
SELECT és “Alkérdezések használata”
-
parallel_clause a Táblázat létrehozása
expr
Adjon meg egy kifejezést, amely feloldja a megfelelő oszlophoz rendelt új értéket.
Lásd még:
6. fejezet, “Kifejezések” a expr
és “Objektumtáblázat frissítése: Példa”
Alapértelmezés Adja meg az DEFAULT
elemet az oszlop előzőleg alapértelmezettként történő beállításához az oszlop értéke. Ha a megfelelő oszlopnak nincs megadva alapértelmezett értéke, akkor az adatbázis nullára állítja az oszlopot.
Korlátozás az alapértelmezett értékekre történő frissítéskor Nem adhatja meg a DEFAULT
elemet, ha nézetet frissít.
VALUE záradék
A VALUE
záradék lehetővé teszi az objektumtábla teljes sorának megadását.
A VALUE záradék korlátozása Ezt a záradékot csak egy objektumtáblához adhatja meg.
Megjegyzés:
Ha karakterlánc-literálokat illeszt be egy RAW
oszlopba, akkor a következő lekérdezések során az Oracle Database teljes táblaellenőrzést hajt végre ahelyett, hogy bármilyen indexet használna az RAW
oszlopban.
Lásd még:
“Objektumtáblázat frissítése: Példa”
where_clause
A where_clause
segítségével korlátozhatja a frissített sorokat azokra, amelyekre a megadott condition
igaz. Ha kihagyja ezt a záradékot, akkor az adatbázis a táblázat vagy nézet összes sorát frissíti. A condition
szintaxisát a 7. fejezetben találja.
A where_clause
meghatározza a sorokat mely értékek frissülnek. Ha nem adja meg a where_clause
elemet, akkor az összes sor frissül. Minden olyan sor esetében, amely kielégíti a where_clause
elemet, az update_set_clause
egyenlőség operátor bal oldalán található oszlopok értéke az üzemeltetőtől jobbra lévő megfelelő kifejezések közül. A kifejezéseket a sor frissítésekor értékelik.
returning_clause
A visszatérő záradék beolvassa a DML utasítással érintett sorokat. Megadhatja ezt a záradékot a táblákhoz és a megvalósult nézetekhez, valamint az egyetlen alaptáblával rendelkező nézetekhez.
Ha egy sorban működik, akkor egy DML utasítás returning_clause
lekérheti az oszlopkifejezéseket az érintett sor, rowid és REFs
használatával az érintett sorra, és tárolhatja őket gazdagép- vagy PL / SQL-változókban.
több sor, egy returning_clause
DML utasítás tárolja a kifejezések, sorok és REFs
kifejezéseket, amelyek az érintett sorokat kötési tömbökbe foglalják.
expr A expr
lista minden elemének érvényes kifejezésszintaxisnak kell lennie.
INTO A INTO
záradék azt jelzi, hogy a megváltozott sorok értékeit a data_item
listában megadott változó (k) ban kell tárolni.
data_item Minden data_item
egy gazdagépváltozó vagy PL / SQL változó, amely tárolja a lekért expr
értéket.
A RETURNING
lista minden kifejezéséhez meg kell adnia egy megfelelő típus-kompatibilis PL / SQL változót vagy gazdagép-változót a INTO
list.
Korlátozások A következő korlátozások vonatkoznak a RETURNING
záradékra:
-
A a következőképpen van korlátozva:
-
UPDATE
ésDELETE
utasításoknak mindenexpr
-nek egyszerű kifejezésnek vagy egyetlen halmazú összesített függvény-kifejezésnek kell lennie. Nem kombinálhatja az egyszerű kifejezéseket és az egyetlen halmazú összesített függvény-kifejezéseket ugyanabban areturning_clause
-ben. AINSERT
utasításokhoz mindenexpr
-nek egyszerű kifejezésnek kell lennie. Az összesített függvényeket egyINSERT
utasításRETURNING
záradék nem támogatja. -
Egyetlen- Az összesített függvénykifejezések nem tartalmazhatják a
DISTINCT
kulcsszót.
-
-
Ha a lista tartalmaz egy elsődleges kulcsoszlopot vagy más
NOT
NULL
oszlopot, akkor a frissítési utasítás meghiúsul, ha a táblázat rendelkezik a rajta meghatározottBEFORE
UPDATE
trigger. -
Nem adhatja meg a
returning_clause
egy többszörösen beilleszthető beillesztéshez. -
Ezt a záradékot nem használhatja párhuzamos DML-sel vagy távoli objektumokkal.
-
Ezzel a záradékkal nem lehet lekérni a
LONG
típusokat. -
Nem adhatja meg ezt a záradékot egy nézethez, amelyen meghatároztak egy
INSTEAD
OF
ravaszt.
Lásd még :
PL / SQL felhasználó ” s Útmutató és tájékoztatás a BULK
COLLECT
záradék használatáról több érték visszaadásához a gyűjtemény változókhoz
error_logging_clause
A error_logging_clause ugyanúgy viselkedik egy UPDATE
utasításban, mint egy INSERT
utasításban. További információkért olvassa el a INSERT
utasítást error_logging_clause.
Lásd még:
“Beszúrás egy táblába hibanaplózással: példa”
Példák
Táblázat frissítése: Példák A következők utasítás semmilyen jutalékot ad az összes olyan munkavállalónak, aki a következő munkakörrel rendelkezik: a 20. osztály 1000 dolláros emelésével:
UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant";
A következő állítás emeli a employees
munkavállaló fizetését táblázat a remote
adatbázisban:
UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";
A következő példa a UPDATE
utasítás:
-
Az
update_set_clause
mindkét formája egyetlen utasításban együtt -
Összefüggő allekérdezés
-
A
where_clause
a frissített sorok korlátozásához
Az előző UPDATE
utasítás a következő műveleteket hajtja végre:
-
Csak azokat az alkalmazottakat frissíti, akik Genfben vagy Münchenben dolgoznak (2900 és 2700 telephelyek)
-
Beállítja a
department_id
ezen alkalmazottak számára a Bombay-nek megfelelődepartment_id
(location_id
2100) -
Az egyes alkalmazottak fizetését az osztályuk átlagos fizetésének 1,1-szeresére állítja
-
Minden alkalmazott jutalékát az osztályuk átlagos jutalmának 1,5-szeresére állítja
Partíció frissítése: Példa Az alábbi példa az sales
tábla egyetlen partíciójában frissíti az értékeket:
UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;
Objektumtáblázat frissítése: Példa A következő utasítás két objektumtáblát hoz létre: people_demo1
és people_demo2
, a Táblagyűjteményekben létrehozott people_typ
objektumról: Példák. A példa bemutatja, hogyan lehet frissíteni egy people_demo1
sort egy sor kiválasztásával a people_demo2
közül:
A példa a VALUE
objektum hivatkozási függvény mind a SET
záradékban, mind az allekérdezésben.
Korrelált frissítés: Példa Például összefüggő allekérdezést használ a beágyazott táblasorok frissítéséhez, kérjük, olvassa el a “Táblagyűjtemények: példák” című részt. / SQL változók bnd1
, bnd2
, bnd3
:
A következő példa azt mutatja, hogy megadhat egyetlen halmaz összesített függvényt a visszatérő záradék kifejezésében:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;