Sintaks dari pernyataan UPDATE adalah:
http://docs.Oracle.com/cd/B19306_01 /server.102/b14200/statements_10007.htm
di mana dml_table_expression_clause
adalah:
Mohon perhatikan ( subquery )
bagian dari sintaks di atas.
subquery
adalah fitur yang memungkinkan untuk melakukan pembaruan gabungan.
Dalam bentuk yang paling sederhana dapat berupa:
UPDATE (
subquery-with-a-join
)
SET cola=colb
Sebelum memperbarui bergabung, Anda harus mengetahui batasan yang tercantum di sini:
https://docs.Oracle.com/cd/B28359_01 /server.111/b28286/statements_8004.htm
- Operator yang ditetapkan
- Operator BERBEDA
- Fungsi agregat atau analitik
- GROUP BY, ORDER BY, MODEL, CONNECT BY, atau START WITH klausa
- Ekspresi koleksi dalam daftar SELECT
- Subkueri dalam daftar PILIH
- Subquery yang ditunjuk DENGAN READ ONLY
- Bergabung, dengan beberapa pengecualian, seperti yang didokumentasikan dalam Panduan Administrator Database Oracle
dan juga aturan umum terkait tampilan yang dapat diperbarui - di sini (bagian:Updating a Join View
):
http://docs .oracle.com/cd/B19306_01/server.102/b14231/views.htm#sthref3055
Pertama-tama kita bisa membuat subquery dengan join:
SELECT age
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'
Kueri ini hanya mengembalikan hasil berikut:
AGE
----------
30
dan sekarang kami dapat mencoba memperbarui kueri kami:
UPDATE (
SELECT age
FROM ages a
JOIN names m ON a.id = m.id
WHERE m.name = 'Sally'
)
SET age = age + 1;
tapi kami mendapatkan kesalahan:
Kesalahan ini berarti, salah satu batasan di atas tidak terpenuhi (tabel yang diawetkan dengan kunci).
Namun jika kita menambahkan kunci utama ke tabel kita:
alter table names add primary key( id );
alter table ages add primary key( id );
maka sekarang pembaruan berfungsi tanpa kesalahan dan hasil akhirnya adalah:
select * from ages;
ID AGE
---------- ----------
1 25
2 31
3 35