UPDATE (Čeština)
Účel
Pomocí příkazu UPDATE můžete změnit existující hodnoty v tabulce nebo v základní tabulce pohledu nebo hlavní tabulka materializovaného pohledu.
Další témata
-
Předpoklady
-
Syntaxe
-
Sémantika
-
Příklady
Předpoklady
Pro Pokud chcete aktualizovat hodnoty v tabulce, musí být tabulka ve vašem vlastním schématu, nebo musíte mít v tabulce oprávnění UPDATE.
Aktualizace hodnoty v základní tabulce pohledu:
-
Musíte mít oprávnění
UPDATEk objektu a -
Kdokoli vlastní schéma obsahující pohled, musí mít oprávnění
UPDATEk objektu v základní tabulce.
Systémové oprávnění UPDATE ANY TABLE také umožňuje aktualizovat hodnoty v libovolném tabulce nebo v základní tabulce jakéhokoli zobrazení.
Musíte mít také oprávnění SELECT k objektu, který chcete aktualizovat, pokud:
-
Objekt je ve vzdálené databázi nebo
-
Inicializační parametr
SQL92_SECURITYje nastaven naTRUEa operaceUPDATEodkazuje na sloupce tabulky, například na sloupce vwhere_clause.
Syntaxe
aktualizace :: =
Popis obrázku update.gif
(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, returns_clause :: =, error_logging_clause :: =)
DML_table_expression_clause :: =
Popis ilustrace DML_table_expression_clause.gif
(subquery :: = – část SELECT, subquery_restriction_clause :: =, table_collection_expression :: =)
subquery_restriction_clause :: =

Popis obrázku subquery_restriction_clause.gif
table_collection_expression :: =
![]()
Popis ilustrace table_collection_expression.gif
update_set_clause :: =

Popis ilustrace update_set_clause. gif
where_clause :: =
![]()
Popis ilustrace where_clause.gif
návratu_clause :: =

Popis obrázku návratu_clause.gif
error_logging_clause :: =
Popis obrázku error_logging_clause.gif
Sémantika
nápověda
Upřesněte komentář který předává pokyny optimalizátoru při výběru plánu provádění příkazu.
Okamžitě za klíčové slovo UPDATE můžete umístit paralelní nápovědu, která paralelizuje oba lhaní a operace UPDATE.
Viz také:
-
Průvodce optimalizací výkonu databáze Oracle a “ Použití tipů „pro syntaxi a popis rad
-
Průvodce optimalizací výkonu databáze Oracle a koncepty Oracle Database pro podrobné informace o paralelním DML
DML_table_expression_clause
Klauzule ONLY se vztahuje pouze na výběry dat. Zadejte ONLY syntaxi, pokud je pohled v klauzuli UPDATE pohled, který patří do hierarchie a nechcete aktualizovat řádky ze žádného jejích dílčích zobrazení.
Viz také:
„Omezení DML_table_expression_clause“ a „Aktualizace tabulky: příklady“
schéma
Určete schéma obsahující objekt, který má být aktualizován. Pokud vynecháte schema, databáze předpokládá, že objekt je ve vašem vlastním schématu.
tabulka | zobrazit | materialized_view | subquery
Určete název tabulky, pohledu, materializovaného pohledu nebo sloupců vrácených poddotazem, které mají být aktualizovány. Vydání příkazu UPDATE proti tabulce spustí jakékoli UPDATE spouštěče spojené s tabulkou.
-
Pokud zadáte
view, databáze aktualizuje základní tabulku pohledu.Nelze aktualizovat zobrazení kromě spouštěčůINSTEADOF, pokud definující dotaz pohledu obsahuje jeden z následujících konstruktů:
operátor množiny ADISTINCToperátor agregační nebo analytická funkce AGROUPBY,ORDERBY,MODEL,CONNECTBYneboSTARTWITHklauzule Výraz kolekce vSELECTseznam Poddotaz vSELECTseznamu Poddotaz označenýWITH READ ONLYSpojení, až na několik výjimek , jak je dokumentováno v příručce Oracle Database Administrator’s Guide
-
Prostřednictvím pohledu nemůžete aktualizovat více než jednu základní tabulku.
-
Navíc, pokud pohled byl vytvořen pomocí
WITHCHECK, pak můžete pohled aktualizovat, pouze pokud výsledná data splňují definující dotaz pohledu. -
Pokud
tablenebo základní tabulkaviewobsahuje jeden nebo více sloupců indexu domény, pak tento příkaz provede příslušnou rutinu aktualizace typu indexu. -
Řádky nelze aktualizovat v materializovaném zobrazení jen pro čtení. Pokud aktualizujete řádky v zapisovatelném materializovaném zobrazení, pak databáze aktualizuje řádky z podkladové tabulky kontejneru. Aktualizace jsou však přepsány při další operaci obnovení. Pokud aktualizujete řádky v aktualizovatelném materializovaném pohledu, který je součástí skupiny materializovaného pohledu, pak databáze také aktualizuje odpovídající řádky v hlavní tabulce.
Viz Také:
-
Příručka pro vývojáře Oracle Data Cartridge pro více informací o rutinách aktualizace typu indexu
-
CREATE MATERIALIZED VIEW pro informace o vytváření aktualizovatelných materializovaných pohledů
PARTITION | SUBPARTITION
Zadejte název oddílu nebo podčásti v rámci table cílené na aktualizace. Při aktualizaci hodnot v dělené tabulce nemusíte zadávat název oddílu. V některých případech však může být zadání názvu oddílu efektivnější než složitější where_clause .
Viz také:
„Odkazy na rozdělené tabulky a indexy“ a „Aktualizace oddílu: příklad“
dblink
Upřesnit úplný nebo částečný název databázového odkazu na vzdálenou databázi, kde t objekt se nachází. Odkaz na databázi můžete použít k aktualizaci vzdáleného objektu, pouze pokud používáte distribuovanou funkčnost Oracle Database.
Pokud vynecháte dblink,, pak databáze předpokládá, že objekt je v místní databázi.
Viz také:
„Odkazy na objekty ve vzdálených databázích“ pro informace o odkazování na odkazy na databázi
subquery_restriction_clause
Použijte subquery_restriction_clause k omezení poddotazu jedním z následujících způsobů:
POUZE PRO ČTENÍ Určete WITH READ ONLY k označení, že tabulku nebo pohled nelze aktualizovat.
S KONTROLA MOŽNOSTI Určete WITH CHECK OPTION k označení, že Oracle Database zakazuje jakékoli změny v tabulce nebo pohledu, které by vedly řádky, které nejsou zahrnuty v poddotazu. Při použití v poddotazu příkazu DML můžete tuto klauzuli zadat v poddotazu v klauzuli FROM, ale ne v poddotazu v WHERE klauzule.
Omezení CONSTRAINT Zadejte název omezení CHECK OPTION. Pokud tento identifikátor vynecháte, Oracle automaticky přiřadí omezení omezení ve tvaru SYS_C n, kde n je celé číslo, které dělá název omezení jedinečný v databázi.
Viz také:
„Použití klauzule WITH CHECK OPTION: Example“
table_collection_expression
table_collection_expression umožňuje informovat společnost Oracle, že s hodnotou collection_expression je třeba zacházet s operacemi dotazu a DML jako s tabulkou. collection_expression může být poddotaz, sloupec, funkce nebo konstruktor kolekce. Bez ohledu na jeho formu musí vrátit hodnotu kolekce – tj. Hodnotu, jejíž typem je vnořená tabulka nebo varray. Tento proces extrakce prvků kolekce se nazývá unnesting kolekce.
Volitelné plus (+) je relevantní, pokud se připojujete k výrazu TABLE s nadřazeným prvkem stůl. + Vytváří vnější spojení dvou, takže dotaz vrací řádky z vnější tabulky, i když je výraz kolekce null.
Poznámka:
V dřívějších verzích Oracle když collection_expression byl poddotaz, table_collection_expression byl vyjádřen jako THE subquery.Toto použití je nyní zastaralé.
Pomocí table_collection_expression můžete aktualizovat řádky v jedné tabulce na základě řádků z jiné tabulky. Můžete například zahrnout čtyři čtvrtletní prodejní tabulky do roční prodejní tabulky.
t_alias
Zadejte korelační název (alias) pro tabulku, pohled nebo poddotaz, na který se bude odkazovat jinde v prohlášení. Tento alias je vyžadován, pokud DML_table_expression_clause odkazuje na jakékoli atributy typu objektu nebo metody typu objektu.
Viz také:
„Související aktualizace: Příklad „
Omezení DML_table_expression_clause Na toto ustanovení se vztahují následující omezení:
-
Toto prohlášení nelze provést, pokud
tablenebo základní tabulkaviewobsahuje jakékoli indexy domén označenéIN_PROGRESSneboFAILED. -
Nelze vložit do oddílu, pokud jsou všechny postižené indexové oddíly označeny
UNUSABLE. -
V poddotazu
DML_table_expression_clausenemůžete zadatorder_by_clause. -
Pokud zadáte index, oddíl indexu nebo pododdíl indexu, který byl označen
UNUSABLE, pak příkazUPDATEselže, pokudSKIP_UNUSABLE_INDEXESparametr relace byl nastaven naTRUE.
Viz také:
ALTER SESSION pro informace o SKIP_UNUSABLE_INDEXES parametr relace
update_set_clause
update_set_clause umožňuje nastavit hodnoty sloupců.
sloupec
Zadejte název sloupce objektu, který má být aktualizován. Pokud vynecháte sloupec tabulky z update_set_clause, hodnota tohoto sloupce zůstane nezměněna.
Pokud column odkazuje na atribut objektu LOB, pak jej musíte nejprve inicializovat s hodnotou empty nebo null. Nelze jej aktualizovat pomocí literálu. Pokud také aktualizujete hodnotu LOB pomocí jiné metody než přímého UPDATE příkazu SQL, musíte nejprve uzamknout řádek obsahující LOB. Další informace naleznete v části for_update_clause.
Pokud je column součástí klíče rozdělení tabulky rozdělené na tabulky, pak UPDATE selže, pokud ve sloupci změníte hodnotu, která by přesunula řádek do jiného oddílu nebo podčásti, pokud nepovolíte pohyb řádku. Přečtěte si row_movement_clause v CREATE TABLE nebo ALTER TABLE.
Navíc je-li column součástí klíč rozdělení tabulky rozdělené na seznamy, pak UPDATE selže, pokud zadáte hodnotu pro sloupec, která ještě v partition_value seznam jednoho z oddílů.
poddotaz
Zadejte poddotaz, který vrací přesně jeden řádek pro každý aktualizovaný řádek.
-
Pokud v
update_set_clausezadáte pouze jeden sloupec, pak poddotaz může vrátit pouze jednu hodnotu. -
Pokud v poli zadáte více sloupců
update_set_clause, pak poddotaz musí vrátit tolik hodnot, kolik jste zadali sloupce. -
Pokud poddotaz nevrací žádné řádky, pak sloupci je přidělena hodnota null.
-
Pokud toto
subqueryodkazuje na vzdálené objekty, pakUPDATEoperace může běžet paralelně tak dlouho, dokud odkaz ce se nesmyčkuje zpět k objektu v místní databázi. Pokud všaksubqueryvDML_table_expression_clauseodkazuje na jakékoli vzdálené objekty, pakUPDATEoperace bude probíhat sériově bez upozornění.
Pomocí flashback_query_clause v poddotazu můžete aktualizovat table s minulými údaji. Další informace o této klauzuli najdete v části flashback_query_clause z SELECT.
Viz také:
-
SELECT a „Používání poddotazů“
-
parallel_clause v dokumentaci CREATE TABLE
expr
Určete výraz, který vyřeší novou hodnotu přiřazenou příslušnému sloupci.
Viz také:
Kapitola 6 „Výrazy“ pro syntaxi a „Aktualizace tabulky objektů: příklad“
DEFAULT Určete DEFAULT a nastavte sloupec na hodnotu dříve určenou jako výchozí hodnota pro sloupec. Pokud pro příslušný sloupec nebyla zadána žádná výchozí hodnota, databáze nastaví sloupec na hodnotu null.
Omezení při aktualizaci na výchozí hodnoty Nelze zadat DEFAULT pokud aktualizujete zobrazení.
Klauzule VALUE
Klauzule VALUE umožňuje zadat celý řádek tabulky objektů.
Omezení klauzule VALUE Tuto klauzuli můžete zadat pouze pro tabulku objektů.
Poznámka:
Pokud vložíte řetězcové literály do sloupce RAW, pak během následujících dotazů provede Oracle Database úplnou kontrolu tabulky namísto použití jakéhokoli indexu, který by mohl existovat ve sloupci RAW.
Viz také:
„Aktualizace tabulky objektů: Příklad“
where_clause
where_clause umožňuje omezit řádky aktualizované na ty, pro které zadaný condition je pravda. Pokud tuto klauzuli vynecháte, databáze aktualizuje všechny řádky v tabulce nebo zobrazení. Syntaxi condition naleznete v kapitole 7 „Podmínky“.
where_clause určuje řádky v které hodnoty jsou aktualizovány. Pokud nezadáte where_clause, aktualizují se všechny řádky. Pro každý řádek, který splňuje where_clause, jsou sloupce nalevo od operátoru rovnosti (=) v update_set_clause nastaveny na hodnoty odpovídajících výrazů vpravo od operátora. Výrazy se vyhodnocují při aktualizaci řádku.
returns_clause
Vracící klauzule načte řádky ovlivněné příkazem DML. Tuto klauzuli můžete zadat pro tabulky a materializovaná zobrazení a pro zobrazení s jednou základní tabulkou.
Při práci na jednom řádku je příkaz DML s returning_clause může načíst výrazy sloupců pomocí ovlivněného řádku, řádku a REFs do ovlivněného řádku a uložit je do hostitelských proměnných nebo proměnných PL / SQL.
Při práci na více řádků, příkaz DML s returning_clause ukládá hodnoty z výrazů, řádků a REFs zahrnujících ovlivněné řádky v polích vazeb.
expr Každá položka v seznamu expr musí být platná syntaxe výrazu.
DO INTO označuje, že hodnoty změněných řádků mají být uloženy v proměnných uvedených v seznamu data_item.
data_item each data_item je hostitelská proměnná nebo proměnná PL / SQL, která ukládá načtenou expr hodnotu.
Pro každý výraz v seznamu RETURNING musíte v INTO seznam.
Omezení Na klauzuli RETURNING se vztahují následující omezení:
-
The
exprje omezeno následovně:-
Pro
UPDATEaDELETEkaždý příkazexprmusí být jednoduchý výraz nebo výraz s jednou agregovanou funkcí. Ve stejnémreturning_clausenelze kombinovat jednoduché výrazy a výrazy agregované funkce s jednou sadou. U příkazůINSERTmusí být každýexprjednoduchý výraz. Agregační funkce nejsou v klauzuliINSERTRETURNINGpodporovány. -
Single- výrazy sady agregovaných funkcí nemohou obsahovat klíčové slovo
DISTINCT.
-
-
Pokud obsahuje sloupec primárního klíče nebo jiný
NOTNULLsloupec, pak se aktualizační příkaz nezdaří, pokud má tabulka aBEFOREUPDATEv něm definovaný spouštěč. -
Nelze zadat
returning_clausepro mnohostrannou vložku. -
Tuto klauzuli nelze použít s paralelním DML nebo se vzdálenými objekty.
-
S touto klauzulí nelze načíst
LONGtypy. -
Tuto klauzuli nemůžete určit pro pohled, na který byl definován
INSTEADOFspouštěč.
Viz také :
Uživatel PL / SQL “ s Guide and Reference for information on using the BULK COLLECT klauzule k vrácení více hodnot do proměnných kolekce
error_logging_clause
Error_logging_clause se chová v příkazu UPDATE stejně jako v příkazu INSERT. Další informace naleznete v prohlášení INSERT error_logging_clause.
Viz také:
„Vkládání do tabulky s protokolováním chyb: Příklad“
Příklady
Aktualizace tabulky: Příklady Následující prohlášení dává nulové provize všem zaměstnancům s úkolem SH_CLERK:
UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";
Následující prohlášení povýší Douglase Granta na manažera oddělení 20 s navýšením o 1 000 $:
UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant";
Následující prohlášení zvyšuje plat zaměstnance v employees tabulka v databázi remote:
UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";
Následující příklad ukazuje následující syntaktické konstrukty UPDATE prohlášení:
-
Obě formy
update_set_clausespolečně v jednom prohlášení -
Korelovaný poddotaz
-
A
where_clausek omezení aktualizovaných řádků
Předchozí příkaz UPDATE provádí následující operace:
-
Aktualizuje pouze ty zaměstnance, kteří pracují v Ženevě nebo Mnichově (pobočky 2900 a 2700)
-
Nastaví
department_idpro tyto zaměstnancedepartment_idodpovídající Bombaji (location_id2100) -
Nastaví plat každého zaměstnance na 1,1násobek průměrného platu jeho oddělení
-
Nastaví provizi každého zaměstnance na 1,5násobek průměrné provize jeho oddělení
Aktualizace oddílu: Příklad Následující příklad aktualizuje hodnoty v jednom oddílu sales tabulky:
UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;
Aktualizace tabulky objektů: Příklad Následující příkaz vytvoří dvě tabulky objektů, people_demo1 a people_demo2 objektu people_typ vytvořeného v kolekcích tabulek: Příklady. Příklad ukazuje, jak aktualizovat řádek people_demo1 výběrem řádku z people_demo2:
Příklad používá VALUE referenční funkce objektu v klauzuli SET i v poddotazu.
Korelovaná aktualizace: Příklad Příklad, který používá korelovaný poddotaz k aktualizaci vnořených řádků tabulky, viz „Kolekce tabulek: příklady“.
Použití klauzule RETURNING během UPDATE: Příklad Následující příklad vrací hodnoty z aktualizovaného řádku a uloží výsledek do PL / Proměnné SQL bnd1, bnd2, bnd3:
následující příklad ukazuje, že můžete zadat agregovanou funkci s jednou sadou ve výrazu vracející se klauzule:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;