Oracle
 sql >> Baza danych >  >> RDS >> Oracle

AKTUALIZACJA za pomocą składni JOIN dla Oracle Database

Składnia instrukcji UPDATE to:

http://docs.oracle.com/cd/B19306_01 /server.102/b14200/statements_10007.htm

gdzie dml_table_expression_clause jest:

Proszę zwrócić uwagę na ( subquery ) część powyższej składni.

subquery to funkcja, która pozwala wykonać aktualizację złączeń.

W najprostszej formie może to być:

UPDATE (
   subquery-with-a-join
)
SET cola=colb

Przed aktualizacją przyłączenia musisz znać ograniczenia wymienione tutaj:

https://docs.oracle.com/cd/B28359_01 /server.111/b28286/statements_8004.htm

  • Operator zbioru
  • ODRÓŻNY operator
  • Funkcja agregująca lub analityczna
  • klauzula GROUP BY, ORDER BY, MODEL, CONNECT BY lub START WITH
  • Wyrażenie kolekcji na liście SELECT
  • Podzapytanie na liście WYBIERZ
  • Podzapytanie oznaczone TYLKO DO ODCZYTU
  • Dołączenia, z pewnymi wyjątkami, zgodnie z dokumentacją w Przewodniku administratora bazy danych Oracle

a także wspólne reguły związane z aktualizowalnymi widokami - tutaj (sekcja:Updating a Join View ):
http://docs .oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3055

Najpierw możemy utworzyć podzapytanie z połączeniem:

SELECT age 
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'

To zapytanie po prostu zwraca następujący wynik:

       AGE
----------
        30

a teraz możemy spróbować zaktualizować nasze zapytanie:

UPDATE (
    SELECT age 
    FROM ages a
    JOIN names m ON a.id = m.id
    WHERE m.name = 'Sally'
)
SET age = age + 1;

ale pojawia się błąd:

Ten błąd oznacza, że ​​jedno z powyższych ograniczeń nie jest spełnione (tabela z zachowaniem klucza).

Jeśli jednak dodamy klucze podstawowe do naszych tabel:

alter table names add primary key( id );
alter table ages add primary key( id );

to teraz aktualizacja działa bez żadnych błędów, a ostateczny wynik to:

select * from ages;

        ID        AGE
---------- ----------
         1         25
         2         31
         3         35



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień separator funkcji WM_CONCAT w Oracle 11gR2

  2. sekwencyjne sumowanie zapytań Oracle na wiersze

  3. Tworzenie aplikacji Java w Oracle JDeveloper, część 2

  4. dane z ostatnich 4 kwartałów

  5. Indeks Oracle 11 tylko dla części danych