UPDATE (Polski)
Cel
Instrukcja UPDATE służy do zmiany istniejących wartości w tabeli lub w tabeli bazowej widoku lub główna tabela zmaterializowanego widoku.
Dodatkowe tematy
-
Wymagania wstępne
-
Składnia
-
Semantyka
-
Przykłady
Wymagania wstępne
Dla Aby zaktualizować wartości w tabeli, tabela musi znajdować się w Twoim własnym schemacie lub musisz mieć uprawnienie UPDATE do tabeli.
Aby zaktualizować wartości w tabeli bazowej widoku:
-
Musisz mieć uprawnienia obiektu
UPDATEdo widoku i -
Ktokolwiek jest właścicielem schematu zawierającego widok, musi mieć uprawnienie do obiektu
UPDATEw tabeli podstawowej.
Uprawnienia systemowe UPDATE ANY TABLE umożliwiają także aktualizowanie wartości w dowolnym stół lub w tabeli bazowej dowolnego widoku.
Musisz także mieć uprawnienie SELECT do obiektu, który chcesz zaktualizować, jeśli:
-
Obiekt znajduje się w zdalnej bazie danych lub
-
Parametr inicjalizacji
SQL92_SECURITYjest ustawiony naTRUEi operacjaUPDATEodwołuje się do kolumn tabeli, takich jak kolumny wwhere_clause.
Składnia
update :: =
Opis ilustracji update.gif
(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, returning_clause :: =, error_logging_clause :: =)
DML_table_expression_clause :: =
Opis ilustracji DML_table_expression_clause.gif
(subquery :: = – część SELECT, subquery_restriction_clause :: =, table_collection_expression :: =)
subquery_restriction_clause :: =

Opis ilustracji subquery_restriction_clause.gif
table_collection_expression :: =
![]()
Opis ilustracji table_collection_expression.gif
update_set_clause :: =

Opis ilustracji update_set_clause. gif
where_clause :: =
![]()
Opis ilustracji where_clause.gif
returning_clause :: =

Opis ilustracji returning_clause.gif
error_logging_clause :: =
Opis ilustracji error_logging_clause.gif
Semantyka
wskazówka
Podaj komentarz który przekazuje instrukcje do optymalizatora dotyczące wyboru planu wykonania instrukcji.
Możesz umieścić równoległą wskazówkę bezpośrednio po słowie kluczowym UPDATE, aby zrównoleglać oba elementy pod kłamliwe skanowanie i operacje UPDATE.
Zobacz też:
-
Oracle Database Performance Tuning Guide i „ Korzystanie z podpowiedzi do składni i opisu wskazówek
-
Oracle Database Performance Tuning Guide i Oracle Database Concepts w celu uzyskania szczegółowych informacji na temat równoległego DML
DML_table_expression_clause
Klauzula ONLY ma zastosowanie tylko do widoków. Określ składnię ONLY, jeśli widok w klauzuli UPDATE jest widokiem należącym do hierarchii i nie chcesz aktualizować wierszy z żadnej jego podglądów podrzędnych.
Zobacz także:
„Ograniczenia dotyczące DML_table_expression_clause” i „Aktualizacja tabeli: przykłady”
schemat
Określ schemat zawierający obiekt do aktualizacji. Jeśli pominiesz schema, baza danych przyjmie, że obiekt znajduje się w Twoim własnym schemacie.
table | zobacz | materialized_view | subquery
Określ nazwę tabeli, widoku, widoku zmaterializowanego lub kolumn zwróconych przez podzapytanie do zaktualizowania. Wydanie instrukcji UPDATE w odniesieniu do tabeli powoduje uruchomienie wszelkich wyzwalaczy UPDATE związanych z tabelą.
-
Jeśli określisz
view, baza danych zaktualizuje tabelę podstawową widoku.Nie można zaktualizować widoku, z wyjątkiem wyzwalaczyINSTEADOF, jeśli zapytanie definiujące widok zawiera jedną z następujących konstrukcji:
Operator zbioru ADISTINCTOperator Funkcja agregująca lub analityczna AGROUPBY,ORDERBY,MODEL,CONNECTBYlubSTARTWITHklauzula Wyrażenie kolekcji wSELECTlista Podzapytanie naSELECTliście Podzapytanie oznaczoneWITH READ ONLYŁączy, z pewnymi wyjątkami , zgodnie z dokumentacją w Podręczniku administratora bazy danych Oracle Database
-
Nie można zaktualizować więcej niż jednej tabeli bazowej za pośrednictwem widoku.
-
Ponadto, jeśli widok został utworzony za pomocą
WITHCHECK, możesz zaktualizować widok tylko wtedy, gdy otrzymane dane spełniają zapytanie definiujące widok. -
Jeśli
tablelub tabela bazowaviewzawiera jedną lub więcej kolumn indeksu domeny, to ta instrukcja wykonuje odpowiednią procedurę aktualizacji typu indeksu. -
Nie można aktualizować wierszy w zmaterializowanym widoku tylko do odczytu. Jeśli zaktualizujesz wiersze w zapisywalnym widoku zmaterializowanym, baza danych zaktualizuje wiersze z podstawowej tabeli kontenera. Jednak aktualizacje są nadpisywane przy następnej operacji odświeżania. Jeśli zaktualizujesz wiersze w aktualizowanym widoku zmaterializowanym, który jest częścią grupy widoków zmaterializowanych, baza danych zaktualizuje również odpowiednie wiersze w tabeli głównej.
Zobacz Ponadto:
-
Podręcznik programisty Oracle Data Cartridge Developer, aby uzyskać więcej informacji na temat procedur aktualizacji typów indeksów
-
UTWÓRZ ZMATERIALIZOWANY WIDOK, aby uzyskać informacje na temat tworzenie widoków zmaterializowanych, które można aktualizować
PARTITION | SUBPARTITION
Określ nazwę partycji lub subpartycji w table przeznaczone do aktualizacji. Nie musisz określać nazwy partycji podczas aktualizowania wartości w tabeli partycjonowanej. Jednak w niektórych przypadkach określenie nazwy partycji może być bardziej wydajne niż skomplikowane where_clause .
Zobacz także:
„Odwoływanie się do podzielonych tabel i indeksów” oraz „Aktualizowanie partycji: przykład”
dblink
Określ pełna lub częściowa nazwa łącza do zdalnej bazy danych, gdzie t obiekt jest zlokalizowany. Możesz użyć łącza do bazy danych do zaktualizowania zdalnego obiektu tylko wtedy, gdy korzystasz z rozproszonej funkcjonalności Oracle Database.
Jeśli pominiesz dblink,, baza danych przyjmie, że w lokalnej bazie danych.
Zobacz także:
„Referring to Objects in Remote Databases” (Odwołanie się do obiektów w zdalnych bazach danych) zawiera informacje na temat odwoływania się do linków do baz danych. p> Użyj subquery_restriction_clause, aby ograniczyć podzapytanie na jeden z następujących sposobów:
TYLKO DO CZYTANIA Określ WITH READ ONLY aby wskazać, że nie można zaktualizować tabeli lub widoku.
Z opcją wyboru Podaj WITH CHECK OPTION, aby wskazać, że baza danych Oracle zabrania jakichkolwiek zmian w tabeli lub widoku, które spowodowałyby wiersze, które nie są uwzględnione w podzapytaniu. W przypadku użycia w podzapytaniu instrukcji DML można określić tę klauzulę w podzapytaniu w klauzuli FROM, ale nie w podzapytaniu w WHERE klauzula.
CONSTRAINT ograniczenie Określ nazwę ograniczenia CHECK OPTION. Jeśli pominiesz ten identyfikator, Oracle automatycznie przypisze ograniczeniu nazwę formularza SYS_C n, gdzie n jest liczbą całkowitą, która daje nazwa ograniczenia unikalna w bazie danych.
Zobacz także:
„Korzystanie z klauzuli WITH CHECK OPTION: Przykład”
table_collection_expression
table_collection_expression pozwala poinformować Oracle, że wartość collection_expression powinna być traktowana jako tabela na potrzeby zapytań i operacji DML. collection_expression może być podzapytaniem, kolumną, funkcją lub konstruktorem kolekcji. Niezależnie od swojej formy, musi zwrócić wartość kolekcji – to znaczy wartość, której typem jest zagnieżdżona tabela lub zmienna. Ten proces wyodrębniania elementów kolekcji nazywa się unnesting kolekcji.
Opcjonalny znak plus (+) jest istotny, jeśli łączysz wyrażenie TABLE z elementem nadrzędnym stół. Znak + tworzy sprzężenie zewnętrzne tych dwóch, więc zapytanie zwraca wiersze z tabeli zewnętrznej, nawet jeśli wyrażenie kolekcji ma wartość null.
Uwaga:
We wcześniejszych wersjach Oracle, kiedy collection_expression było podzapytaniem, table_collection_expression zostało wyrażone jako THE subquery.To użycie jest teraz przestarzałe.
Możesz użyć table_collection_expression, aby zaktualizować wiersze w jednej tabeli na podstawie wierszy z innej tabeli. Na przykład, możesz zebrać cztery kwartalne tabele sprzedaży w roczną tabelę sprzedaży.
t_alias
Określ nazwę korelacji (alias) dla tabeli, widoku lub podzapytania, do którego ma się odwoływać w innym miejscu oświadczenia. Ten alias jest wymagany, jeśli DML_table_expression_clause odwołuje się do atrybutów typu obiektu lub metod typu obiektu.
Zobacz też:
„Skorelowana aktualizacja: przykład „
Ograniczenia dotyczące DML_table_expression_clause Ta klauzula podlega następującym ograniczeniom:
-
Nie możesz wykonać tej instrukcji, jeśli
tablelub tabela podstawowaviewzawiera wszelkie indeksy domen oznaczone jakoIN_PROGRESSlubFAILED. -
Nie możesz wstawić do partycji, jeśli jakiekolwiek partycje indeksu, których dotyczy problem, są oznaczone
UNUSABLE. -
Nie możesz określić
order_by_clausew podzapytaniuDML_table_expression_clause. -
Jeśli określisz indeks, partycję indeksu lub partycję indeksu, która została oznaczona jako
UNUSABLE, to instrukcjaUPDATEzakończy się niepowodzeniem, chyba żeSKIP_UNUSABLE_INDEXESparametr sesji został ustawiony naTRUE.
Zobacz także:
ALTER SESSION, aby uzyskać informacje o SKIP_UNUSABLE_INDEXES parametr sesji
update_set_clause
update_set_clause pozwala ustawić wartości kolumn.
kolumna
Określ nazwę kolumny obiektu, który ma zostać zaktualizowany. Jeśli pominiesz kolumnę tabeli z update_set_clause, wartość tej kolumny pozostanie niezmieniona.
Jeśli column odnosi się do atrybutu obiektu LOB, następnie musisz najpierw zainicjować go wartością pustą lub null. Nie możesz zaktualizować go literałem. Ponadto, jeśli aktualizujesz wartość LOB przy użyciu innej metody niż bezpośrednia instrukcja UPDATE SQL, musisz najpierw zablokować wiersz zawierający LOB. Aby uzyskać więcej informacji, zobacz for_update_clause.
Jeśli column jest częścią klucza partycjonowania tabeli podzielonej na partycje, to UPDATE zakończy się niepowodzeniem, jeśli zmienisz wartość w kolumnie, która spowodowałaby przeniesienie wiersza do innej partycji lub podpartycji, chyba że włączysz przenoszenie wiersza. Zapoznaj się z row_movement_clause instrukcji CREATE TABLE lub ALTER TABLE.
Ponadto, jeśli column jest częścią klucz partycjonowania tabeli podzielonej na listy, a następnie UPDATE zakończy się niepowodzeniem, jeśli określisz wartość kolumny, która nie istnieje jeszcze w partition_value lista jednej z partycji.
podzapytanie
Określ podzapytanie, które zwraca dokładnie jeden wiersz dla każdego zaktualizowanego wiersza.
-
Jeśli określisz tylko jedną kolumnę w
update_set_clause, wówczas podzapytanie może zwrócić tylko jedną wartość. -
Jeśli określisz wiele kolumn w
update_set_clause, to podzapytanie musi zwrócić tyle wartości, ile podałeś kolumn. -
Jeśli podzapytanie nie zwróci żadnych wierszy, wówczas kolumna ma przypisaną wartość null.
-
Jeśli ta
subqueryodnosi się do obiektów zdalnych, wówczasUPDATEmoże działać równolegle, o ile odwołanie ce nie zapętla się z powrotem do obiektu w lokalnej bazie danych. Jeśli jednaksubquerywDML_table_expression_clauseodnosi się do jakichkolwiek zdalnych obiektów, wówczasUPDATEoperacja będzie wykonywana seryjnie bez powiadomienia.
Możesz użyć flashback_query_clause w podzapytaniu, aby zaktualizować table z wcześniejszymi danymi. Więcej informacji na temat tej klauzuli można znaleźć w flashback_query_clause z SELECT.
Zobacz także:
-
SELECT i „Using Subqueries”
-
parallel_clause w dokumentacji CREATE TABLE
wyrażenie
Podaj wyrażenie, które będzie tłumaczone na nową wartość przypisaną do odpowiedniej kolumny.
Zobacz też:
Rozdział 6, „Wyrażenia”, aby poznać składnię i „Aktualizacja tabeli obiektów: przykład”
DOMYŚLNIE Określ DEFAULT, aby ustawić w kolumnie wartość określoną wcześniej jako domyślną wartość dla kolumny. Jeśli nie określono wartości domyślnej dla odpowiedniej kolumny, baza danych ustawia kolumnę na wartość null.
Ograniczenie aktualizacji do wartości domyślnych Nie można określić DEFAULT, jeśli aktualizujesz widok.
Klauzula VALUE
Klauzula VALUE pozwala określić cały wiersz tabeli obiektów.
Ograniczenie klauzuli VALUE Tę klauzulę można określić tylko dla tabeli obiektów.
Uwaga:
Jeśli wstawisz literały ciągów do kolumny RAW, to podczas kolejnych zapytań Oracle Database przeprowadzi pełne skanowanie tabeli zamiast używać jakiegokolwiek indeksu, który może istnieć w kolumnie RAW.
Zobacz też:
„Aktualizacja tabeli obiektów: przykład”
where_clause
where_clause pozwala ograniczyć wiersze zaktualizowane do tych, dla których określony condition jest prawdą. Jeśli pominiesz tę klauzulę, baza danych zaktualizuje wszystkie wiersze w tabeli lub widoku. Zapoznaj się z rozdziałem 7, „Warunki”, aby zapoznać się ze składnią condition.
Element where_clause określa wiersze w które wartości są aktualizowane. Jeśli nie określisz where_clause, wszystkie wiersze zostaną zaktualizowane. Dla każdego wiersza spełniającego kryteria where_clause, kolumny po lewej stronie operatora równości (=) w update_set_clause są ustawiane na wartości odpowiednich wyrażeń po prawej stronie operatora. Wyrażenia są oceniane podczas aktualizacji wiersza.
returning_clause
Klauzula return pobiera wiersze, na które ma wpływ instrukcja DML. Możesz określić tę klauzulę dla tabel i widoków zmaterializowanych oraz dla widoków z pojedynczą tabelą podstawową.
Podczas działania na jednym wierszu instrukcja DML z returning_clause może pobrać wyrażenia kolumnowe za pomocą odpowiedniego wiersza, identyfikatora wiersza i REFs do odpowiedniego wiersza i zapisać je w zmiennych języka macierzystego lub zmiennych PL / SQL.
Podczas pracy na w wielu wierszach instrukcja DML z returning_clause przechowuje wartości z wyrażeń, rzędów i REFs obejmujących odpowiednie wiersze w tablicach powiązań.
wyrażenie Każda pozycja na liście expr musi mieć prawidłową składnię wyrażenia.
INTO INTO oznacza, że wartości zmienionych wierszy mają być przechowywane w zmiennych określonych na liście data_item.
data_item Każdy data_item to zmienna języka macierzystego lub zmienna PL / SQL, która przechowuje pobraną wartość expr.
Dla każdego wyrażenia na liście RETURNING należy określić odpowiednią zmienną PL / SQL lub zmienną języka macierzystego zgodną z typem w INTO lista.
Ograniczenia Poniższe ograniczenia dotyczą klauzuli RETURNING:
-
exprpodlega następującym ograniczeniom:-
For
UPDATEiDELETEinstrukcje, każdaexprmusi być prostym wyrażeniem lub wyrażeniem funkcji agregującej z pojedynczym zestawem. Nie można łączyć prostych wyrażeń i wyrażeń funkcji agregujących z jednym zestawem w tym samymreturning_clause. W przypadku instrukcjiINSERTkażdeexprmusi być prostym wyrażeniem. Funkcje agregujące nie są obsługiwane w klauzuliINSERTRETURNING. -
Single- wyrażenia funkcji agregujących nie mogą zawierać słowa kluczowego
DISTINCT.
-
-
Jeśli zawiera kolumnę klucza podstawowego lub inną kolumnę
NOTNULL, to instrukcja aktualizacji kończy się niepowodzeniem, jeśli tabela zawiera zdefiniowany w nim wyzwalaczBEFOREUPDATE. -
Nie można określić
returning_clausedla wstawki z wieloma tabelami. -
Nie możesz używać tej klauzuli z równoległym DML lub zdalnymi obiektami.
-
Nie możesz pobrać typów
LONGz tą klauzulą. -
Nie możesz określić tej klauzuli dla widoku, w którym zdefiniowano wyzwalacz
INSTEADOF.
Zobacz też :
PL / SQL Użytkownik ” s Przewodnik i dokumentacja zawierająca informacje na temat używania klauzuli BULK COLLECT do zwracania wielu wartości do zmiennych kolekcji
error_logging_clause
error_logging_clause zachowuje się tak samo w instrukcji UPDATE, jak w instrukcji INSERT. Więcej informacji można znaleźć w instrukcji INSERT error_logging_clause.
Zobacz także:
„Wstawianie do tabeli z rejestrowaniem błędów: przykład”
Przykłady
Aktualizowanie tabeli: przykłady Poniższe oświadczenie daje zerowe prowizje wszystkim pracownikom na stanowisku SH_CLERK:
UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";
Poniższe oświadczenie promuje Douglasa Granta na stanowisko kierownika działu 20 z podwyżką o 1000 USD:
UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant";
Poniższe oświadczenie zwiększa pensję pracownika w employees tabela w bazie danych remote:
UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";
Następny przykład przedstawia następujące konstrukcje składniowe UPDATE:
-
Obie formy
update_set_clauserazem w jednej instrukcji -
Skorelowane podzapytanie
-
A
where_clausew celu ograniczenia zaktualizowanych wierszy
Poprzednia instrukcja UPDATE wykonuje następujące operacje:
-
Aktualizuje tylko tych pracowników, którzy pracują w Genewie lub Monachium (lokalizacje 2900 i 2700)
-
Ustawia
department_iddla tych pracowników dodepartment_idodpowiadającego Bombaju (location_id2100) -
Ustawia wynagrodzenie każdego pracownika na 1,1-krotność średniej pensji jego działu
-
Ustawia prowizję każdego pracownika na 1,5-krotność średniej prowizji jego działu
Aktualizowanie partycji: przykład Poniższy przykład aktualizuje wartości w jednej partycji tabeli sales:
UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;
Aktualizowanie tabeli obiektów: przykład Poniższa instrukcja tworzy dwie tabele obiektów, people_demo1 i people_demo2 , obiektu people_typ utworzonego w Kolekcje tabel: Przykłady. Przykład pokazuje, jak zaktualizować wiersz people_demo1, wybierając wiersz z people_demo2:
W przykładzie zastosowano VALUE funkcja odniesienia do obiektu zarówno w klauzuli SET, jak i w podzapytaniu.
Skorelowana aktualizacja: przykład Przykład, który używa skorelowanego podzapytania do aktualizacji zagnieżdżonych wierszy tabeli, zapoznaj się z „Kolekcje tabel: Przykłady”.
Korzystanie z klauzuli RETURNING Podczas UPDATE: Przykład Poniższy przykład zwraca wartości ze zaktualizowanego wiersza i zapisuje wynik w PL / Zmienne SQL bnd1, bnd2, bnd3:
Poniższy przykład pokazuje, że możesz określić funkcję agregującą z pojedynczym zestawem w wyrażeniu klauzuli zwracającej:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;