Di Oracle, apakah mungkin untuk MEMASUKKAN atau MEMPERBARUI catatan (baris) melalui tampilan?
Di Oracle, apakah mungkin untuk MEMASUKKAN atau MEMPERBARUI catatan melalui tampilan?
Jawaban (4)
Tampilan di Oracle dapat dapat diperbarui dalam kondisi tertentu. Ini mungkin rumit, dan biasanya tidak disarankan.
Dari Referensi SQL Oracle 10g:
Catatan tentang Tampilan yang Dapat Diperbarui
Tampilan yang dapat diperbarui adalah tampilan yang dapat Anda gunakan untuk menyisipkan, memperbarui, atau menghapus baris tabel dasar. Anda dapat membuat tampilan agar dapat diperbarui secara inheren, atau Anda dapat membuat pemicu INSTEAD OF pada tampilan mana pun untuk membuatnya dapat diperbarui.
Untuk mempelajari apakah dan dengan cara apa kolom tampilan yang dapat diperbarui secara inheren dapat dimodifikasi, kueri tampilan kamus data USER_UPDATABLE_COLUMNS. Informasi yang ditampilkan oleh tampilan ini hanya bermakna untuk tampilan yang dapat diperbarui secara inheren. Agar suatu tampilan dapat diperbarui secara inheren, kondisi berikut harus dipenuhi:
- Setiap kolom dalam tampilan harus dipetakan ke kolom tabel tunggal. Misalnya, jika kolom tampilan dipetakan ke output klausa TABLE (koleksi yang tidak disarangkan), maka tampilan tersebut tidak dapat diperbarui secara inheren.
- The view must not contain any of the following constructs:
- A set operator
- operator BERBEDA
- Fungsi agregat atau analitik
- Klausa GROUP BY, ORDER BY, MODEL, CONNECT BY, atau START WITH
- Ekspresi koleksi dalam daftar SELECT
- Subquery dalam daftar SELECT
- Subkueri yang ditunjuk DENGAN READ ONLY
- Bergabung, dengan beberapa pengecualian, seperti yang didokumentasikan dalam Panduan Administrator Database Oracle
Selain itu, jika tampilan yang dapat diperbarui secara inheren berisi kolom semu atau ekspresi, maka Anda tidak dapat memperbarui baris tabel dasar dengan pernyataan UPDATE yang merujuk ke salah satu kolom atau ekspresi tersebut.
Jika Anda ingin tampilan gabungan dapat diperbarui, semua kondisi berikut harus dipenuhi:
- Pernyataan DML harus mempengaruhi hanya satu tabel yang mendasari penggabungan.
- Untuk pernyataan INSERT, tampilan tidak boleh dibuat DENGAN OPSI PERIKSA, dan semua kolom tempat nilai dimasukkan harus berasal dari tabel yang kuncinya dipertahankan. Tabel yang kuncinya dipertahankan adalah tabel yang setiap kunci utama atau nilai kunci uniknya dalam tabel dasar juga unik dalam tampilan gabungan.
- Untuk pernyataan UPDATE, semua kolom yang diperbarui harus diekstraksi dari tabel yang kuncinya dipertahankan. Jika tampilan dibuat DENGAN OPSI PERIKSA, maka kolom gabungan dan kolom yang diambil dari tabel yang direferensikan lebih dari satu kali dalam tampilan harus dilindungi dari UPDATE.
- Untuk pernyataan DELETE, jika gabungan menghasilkan lebih dari satu tabel yang kuncinya dipertahankan, maka Oracle Database akan menghapus dari tabel pertama yang disebutkan dalam klausa FROM, baik tampilan tersebut dibuat DENGAN OPSI PERIKSA atau tidak.
Oracle memiliki dua cara berbeda untuk membuat tampilan dapat diperbarui: -
- Tampilannya adalah "kunci dipertahankan" sehubungan dengan apa yang Anda coba perbarui. Ini berarti kunci utama tabel yang mendasarinya ada dalam tampilan dan baris hanya muncul sekali dalam tampilan. Ini berarti Oracle dapat mengetahui dengan tepat baris tabel mana yang akan diperbarui ATAU
- Anda menulis, bukan pemicu.
Saya akan menghindari pemicu dan meminta kode Anda memperbarui tabel yang mendasarinya secara langsung daripada melalui tampilan.
and
atau or
di antara kedua kondisi ini? (Bagi saya ini terdengar seperti dua ide yang terpisah ..
- person Thorsten; 02.11.2009
Ada dua waktu ketika Anda dapat memperbarui catatan melalui tampilan:
- Jika tampilan tidak memiliki gabungan atau panggilan prosedur dan memilih data dari satu tabel yang mendasarinya.
- Jika tampilan memiliki Pemicu BUKAN INSERT yang dikaitkan dengan tampilan.
Secara umum, Anda tidak boleh mengandalkan kemampuan untuk melakukan penyisipan ke tampilan kecuali Anda telah secara khusus menulis pemicu INSTEAD OF untuk tampilan tersebut. Sadarilah, ada juga pemicu INSTEAD OF UPDATE yang dapat ditulis juga untuk membantu melakukan pembaruan.
YA, Anda dapat Memperbarui dan Menyisipkan ke dalam tampilan dan hasil edit tersebut akan tercermin pada tabel asli....
TAPI
1-tampilan harus memiliki semua nilai NOT NULL pada tabel
2-pembaruan harus memiliki aturan yang sama seperti tabel... "memperbarui kunci utama terkait dengan kunci asing lainnya.. dll"...