Syntaksen for UPDATE-sætningen er:
http://docs.oracle.com/cd/B19306_01 /server.102/b14200/statements_10007.htm
hvor dml_table_expression_clause
er:
Vær opmærksom på ( subquery )
del af ovenstående syntaks.
subquery
er en funktion, der gør det muligt at udføre en opdatering af joinforbindelser.
I den mest simple form kan det være:
UPDATE (
subquery-with-a-join
)
SET cola=colb
Før du opdaterer et medlemskab, skal du kende de begrænsninger, der er angivet her:
https://docs.oracle.com/cd/B28359_01 /server.111/b28286/statements_8004.htm
- En sæt-operator
- EN DISTINKT operator
- En aggregeret eller analytisk funktion
- EN GROUP BY, ORDER BY, MODEL, CONNECT BY eller START WITH-klausul
- Et samlingsudtryk i en SELECT-liste
- En underforespørgsel i en SELECT-liste
- En underforespørgsel, der er angivet MED SKRIVEKUN
- Tilslutter sig, med nogle undtagelser, som dokumenteret i Oracle Database Administrator's Guide
og også almindelige regler relateret til opdaterbare visninger - her (afsnit:Updating a Join View
):
http://docs .oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3055
Vi kan først oprette en underforespørgsel med et join:
SELECT age
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'
Denne forespørgsel returnerer blot følgende resultat:
AGE
----------
30
og nu kan vi prøve at opdatere vores forespørgsel:
UPDATE (
SELECT age
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'
)
SET age = age + 1;
men vi får en fejl:
Denne fejl betyder, at en af ovenstående begrænsninger ikke er opfyldt (nøglebevaret tabel).
Men hvis vi tilføjer primærnøgler til vores tabeller:
alter table names add primary key( id );
alter table ages add primary key( id );
så fungerer opdateringen nu uden fejl, og et endeligt resultat er:
select * from ages;
ID AGE
---------- ----------
1 25
2 31
3 35