Pages

Wednesday, 18 December 2013

ORACLE : Update Tabel dari Tabel Lain

Sebelum meng-update suatu tabel, biasanya dilakukan back up table (Cara back up tabel bisa dilihat di tulisan Oracle : Back up Table).

Setelah melakukan back up dan commit, tidak jarang pula terjadi kesalahan sehingga data harus dikembalikan seperti semula. Ini artinya kita harus meng-update suatu tabel dari tabel lain.


Ada suatu table yang bernama tbl_siswa. tbl_siswa ini terdiri dari beberapa field, yaitu :
  1. id_siswa
  2. first_name
  3. middle_name
  4. last_name
  5. birthday
Sebelum melakukan update pada tabel tbl_siswa, terlebih dahulu dibuat tabel back up yang bernama tbl_siswa_20131219. Ternyata, setelah melakukan perubahan data, didapati kesalahan sehingga harus mengembalikan data seperti keadaan sebelumnya,

Dibawah ini adalah bentuk umum untuk mengembalikan data tbl_siswa sama seperti data yang ada pada tbl_siswa_20121219.
 


UPDATE [tabel_yang_diupdate] [nama_temporary_update]
SET [nama_temporary_update].field1 = (
  SELECT [nama_temporary_sumber].field1 from [tabel_sumber] [nama_temporary_sumber]
  WHERE  [nama_temporary_sumber].id = [nama_temporary_update].id

)
WHERE  [nama_temporary_update].id in (SELECT [tabel_sumber].id FROM [tabel_sumber])
  


 Bila kita aplikasikan, hasilnya adalah sebagai berikut :



UPDATE tbl_siswa ganti
SET ganti.first_name = (
  SELECT sumber.first_name from tbl_siswa_20131219 sumber
  WHERE  ganti.id_siswa = sumber.id_siswa

)
WHERE  ganti.id_siswa in (SELECT sumber.id_siswa FROM tbl_siswa_20131219)
  

Perintah di atas akan mengganti field first_name semua record di tbl_siswa (diberikan nama sementara dalam query tersebut menjadi ganti) dengan first_name yang ada di tabel sumber, yaitu yang id_siswanya sama (WHERE  ganti.id_siswa = sumber.id_siswa).

Pastikan semua field di tabel update mempunyai query di tabel sumber. Jika tidak ada, maka secara otomatis Oracle akan memberikan nilai null. Oleh karena itu lakukan filter seperti di bawah ini untuk melakukan update hanya pada record yang juga terdapat di tabel sumber.

WHERE  [nama_temporary_update].id in (
     SELECT [tabel_sumber].id FROM [tabel_sumber])

No comments:

Post a Comment