Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Permintaan Pembaruan Oracle SQL membutuhkan waktu berhari-hari untuk diperbarui

Anda dapat mencoba ini

  1  MERGE
  2     INTO  target_table tgt
  3     USING source_table src
  4     ON  ( src.object_id = tgt.object_id )
  5  WHEN MATCHED
  6  THEN
  7     UPDATE
  8     SET   tgt.object_name = src.object_name
  9     ,     tgt.object_type = src.object_type
 10  WHEN NOT MATCHED
 11  THEN
 12     INSERT ( tgt.object_id
 13            , tgt.object_name
 14            , tgt.object_type )
 15     VALUES ( src.object_id
 16            , src.object_name
 17            , src.object_type );

Sintaksnya pada awalnya terlihat sedikit menakutkan, tetapi jika kita membaca dari atas ke bawah, ini cukup intuitif. Perhatikan klausa berikut:

•MERGE (baris 1):seperti yang dinyatakan sebelumnya, ini adalah pernyataan DML ke-4 di Oracle. Petunjuk apa pun yang mungkin ingin kami tambahkan langsung ikuti kata kunci ini (yaitu MERGE /*+ HINT */);

•INTO (baris 2):ini adalah bagaimana kami menentukan target untuk MERGE. Target harus berupa tabel atau tampilan yang dapat diperbarui (tampilan sebaris tidak dapat digunakan di sini);

•USING (baris 3):klausa USING mewakili kumpulan data sumber untuk MERGE. Ini bisa berupa tabel tunggal (seperti dalam contoh kita) atau tampilan sebaris;

•ON () (baris 4):klausa ON adalah tempat kita menyediakan gabungan antara kumpulan data sumber dan tabel target. Perhatikan bahwa kondisi bergabung harus dalam tanda kurung;

•WHEN MATCHED (baris 5):klausa ini adalah tempat kita menginstruksikan Oracle tentang apa yang harus dilakukan ketika kita sudah memiliki record yang cocok di tabel target (yaitu ada gabungan antara kumpulan data sumber dan target). Kami jelas menginginkan UPDATE dalam kasus ini. Salah satu batasan klausa ini adalah kita tidak dapat memperbarui kolom mana pun yang digunakan dalam klausa ON (walaupun tentu saja kita tidak perlu memperbaruinya karena sudah cocok). Upaya apa pun untuk menyertakan kolom gabungan akan memunculkan pengecualian pengidentifikasi tidak valid yang tidak intuitif; dan

•WHEN NOT MATCHED (baris 10):klausa ini adalah tempat kita INSERT record yang tidak ada kecocokannya saat ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menanyakan hari tertentu dalam sebulan di Oracle

  2. Tidak ada STOPKEY per partisi dalam paket Oracle untuk paging dengan indeks lokal

  3. Apakah hak istimewa pada tabel yang mendasarinya secara otomatis diteruskan ke tampilan apa pun yang dibuat di atas tabel?

  4. Apakah mungkin untuk merujuk ke nama kolom melalui variabel bind di Oracle?

  5. String koneksi Oracle ODP.NET:apa yang terjadi di Sumber Data?