Di Oracle, apakah mungkin untuk MEMASUKKAN atau MEMPERBARUI catatan melalui tampilan?

Di Oracle, apakah mungkin untuk MEMASUKKAN atau MEMPERBARUI catatan (baris) melalui tampilan?


person Bastien Vandamme    schedule 31.10.2009    source sumber
comment
Maksudku rekor. Saya mengedit pertanyaannya.   -  person Bastien Vandamme    schedule 31.10.2009


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.
person DCookie    schedule 31.10.2009

Oracle memiliki dua cara berbeda untuk membuat tampilan dapat diperbarui: -

  1. 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
  2. Anda menulis, bukan pemicu.

Saya akan menghindari pemicu dan meminta kode Anda memperbarui tabel yang mendasarinya secara langsung daripada melalui tampilan.

person WW.    schedule 31.10.2009
comment
Apakah ada 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:

  1. Jika tampilan tidak memiliki gabungan atau panggilan prosedur dan memilih data dari satu tabel yang mendasarinya.
  2. 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.

person LBushkin    schedule 31.10.2009
comment
Sebagian besar benar, namun ada kemungkinan untuk memperbarui tampilan gabungan dalam beberapa kasus. - person DCookie; 31.10.2009

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"...

person Radi Soufan    schedule 23.05.2015