Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat ORA-00933 dalam Kenyataan KEMASKINI Oracle dengan INNER JOIN?
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>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>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>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!