Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Membetulkan Ralat ORA-00933 dalam Kenyataan KEMASKINI Oracle dengan INNER JOIN?

Bagaimana untuk Membetulkan Ralat ORA-00933 dalam Kenyataan KEMASKINI Oracle dengan INNER JOIN?

Patricia Arquette
Lepaskan: 2025-01-25 04:46:10
asal
543 orang telah melayarinya

How to Fix ORA-00933 Error in Oracle UPDATE Statements with INNER JOINs?

pernyataan kemas kini oracle dengan gabungan dalaman: Penyelesaian masalah ORA-00933 Ralat

Melaksanakan pernyataan SQL

yang menggabungkan UPDATE di Oracle kadang-kadang boleh mengakibatkan ralat ORA-00933 ("Perintah SQL tidak berakhir dengan betul"). Kesalahan ini, sementara tidak biasa di MySQL, sering berlaku di Oracle. Pertimbangkan contoh ini, yang berfungsi dengan betul di MySQL tetapi gagal dalam Oracle: INNER JOIN

<code class="language-sql">UPDATE table1
INNER JOIN table2 ON table1.value = table2.DESC
SET table1.value = table2.CODE
WHERE table1.UPDATETYPE='blah';</code>
Salin selepas log masuk
Penyelesaian ini melibatkan penyusunan semula pertanyaan Oracle. Berikut adalah dua kaedah yang berkesan:

Kaedah 1: Menggunakan subquery

Pendekatan ini menggunakan subquery untuk mengemas kini

: table1

<code class="language-sql">UPDATE table1 SET table1.value = (SELECT table2.CODE
                                  FROM table2 
                                  WHERE table1.value = table2.DESC)
WHERE table1.UPDATETYPE='blah'
AND EXISTS (SELECT table2.CODE
            FROM table2 
            WHERE table1.value = table2.DESC);</code>
Salin selepas log masuk
klausa

memastikan bahawa hanya baris dengan penyertaan yang sepadan dalam EXISTS dikemas kini, mencegah kesilapan. table2

Kaedah 2: Menggunakan paparan sebaris yang boleh dikemas kini

Kaedah ini menggunakan pandangan sebaris yang boleh dikemas kini:

<code class="language-sql">UPDATE 
(SELECT table1.value as OLD, table2.CODE as NEW
 FROM table1
 INNER JOIN table2
 ON table1.value = table2.DESC
 WHERE table1.UPDATETYPE='blah'
) t
SET t.OLD = t.NEW</code>
Salin selepas log masuk
Kejayaan kaedah ini bergantung kepada keupayaan Oracle untuk mengenal pasti pandangan sebaris sebagai dikemas kini. Rujuk kepada dokumentasi Oracle untuk peraturan tertentu yang mengawal pandangan yang boleh dikemas kini. Kaedah ini mungkin lebih cekap daripada Kaedah 1 dalam senario tertentu. Pilih kaedah yang paling sesuai dengan keperluan khusus dan konfigurasi pangkalan data anda.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat ORA-00933 dalam Kenyataan KEMASKINI Oracle dengan INNER JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan