Creative Saplings

UPDATE (Polski)

29 stycznia, 2021
No Comments

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 UPDATE do widoku i

  • Ktokolwiek jest właścicielem schematu zawierającego widok, musi mieć uprawnienie do obiektu UPDATE w 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_SECURITY jest ustawiony na TRUE i operacja UPDATE odwołuje się do kolumn tabeli, takich jak kolumny w where_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 wyzwalaczy INSTEAD OF, 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ą WITH CHECK , możesz zaktualizować widok tylko wtedy, gdy otrzymane dane spełniają zapytanie definiujące widok.

  • Jeśli table lub tabela bazowa view zawiera 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 table lub tabela podstawowa view zawiera wszelkie indeksy domen oznaczone jako IN_PROGRESS lub FAILED.

  • 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_clause w podzapytaniu DML_table_expression_clause.

  • Jeśli określisz indeks, partycję indeksu lub partycję indeksu, która została oznaczona jako UNUSABLE, to instrukcja UPDATE zakończy się niepowodzeniem, chyba że SKIP_UNUSABLE_INDEXES parametr sesji został ustawiony na TRUE.

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 subquery odnosi się do obiektów zdalnych, wówczas UPDATE może działać równolegle, o ile odwołanie ce nie zapętla się z powrotem do obiektu w lokalnej bazie danych. Jeśli jednak subquery w DML_table_expression_clause odnosi się do jakichkolwiek zdalnych obiektów, wówczas UPDATE operacja 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:

  • expr podlega następującym ograniczeniom:

    • For UPDATE i DELETE instrukcje, każda expr musi 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 samym returning_clause. W przypadku instrukcji INSERT każde expr musi być prostym wyrażeniem. Funkcje agregujące nie są obsługiwane w klauzuli INSERT RETURNING.

    • Single- wyrażenia funkcji agregujących nie mogą zawierać słowa kluczowego DISTINCT.

  • Jeśli zawiera kolumnę klucza podstawowego lub inną kolumnę NOT NULL, to instrukcja aktualizacji kończy się niepowodzeniem, jeśli tabela zawiera zdefiniowany w nim wyzwalacz BEFORE UPDATE.

  • Nie można określić returning_clause dla 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 LONG z tą klauzulą.

  • Nie możesz określić tej klauzuli dla widoku, w którym zdefiniowano wyzwalacz INSTEAD OF.

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_clause razem w jednej instrukcji

  • Skorelowane podzapytanie

  • A where_clause w 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_id dla tych pracowników do department_id odpowiadającego Bombaju (location_id 2100)

  • 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;

Articles
Previous Post

Kupuj w sklepach internetowych w USA i wysyłamy do Indii w 2-4 dni!

Next Post

Niebieskie rasy psów - co sprawia, że są tak piękne?

Dodaj komentarz Anuluj pisanie odpowiedzi

Najnowsze wpisy

  • Najlepsze szkoły fotograficzne na świecie, 2020
  • Suwerenni obywatele zabierają na drogi swoją antyrządową filozofię
  • Przewodnik po kosztach naprawy sztukaterii
  • Muckrakers (Polski)
  • Precyzyjna onkologia

Archiwa

  • Luty 2021
  • Styczeń 2021
  • Grudzień 2020
  • Listopad 2020
  • Październik 2020
  • Wrzesień 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.