Menyelesaikan masalah ORA-00933 Ralat dalam Pertanyaan KEMASKINI Oracle dengan INNER JOIN
Ralat ORA-00933 dalam Oracle selalunya timbul daripada perbezaan sintaks antara Oracle SQL dan sistem pangkalan data lain seperti MySQL, terutamanya apabila menggunakan pernyataan UPDATE
dengan INNER JOIN
s. Artikel ini menangani isu biasa yang dihadapi semasa mengalihkan pertanyaan sedemikian ke Oracle.
Sintaks MySQL standard untuk mengemas kini jadual melalui gabungan dalaman tidak serasi secara langsung dengan Oracle. Berikut ialah dua pendekatan Oracle yang sah:
Kaedah 1: Menggunakan Subkueri dengan EXISTS
Kaedah ini memanfaatkan subkueri untuk mengemas kini table1
berdasarkan nilai padanan dalam table2
, memastikan bahawa hanya baris yang memenuhi kriteria yang ditetapkan dikemas kini.
<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 EXISTS
menghalang ralat jika tiada baris yang sepadan wujud dalam table2
.
Kaedah 2: Menggunakan Paparan Sebaris Boleh Kemas Kini
Jika peraturan kebolehkemaskinian Oracle berpuas hati (seperti yang diperincikan dalam dokumentasi rasmi Oracle), anda boleh menggunakan paparan dalam talian 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>
Pendekatan ini mencipta pandangan sementara (t
) yang membolehkan kemas kini yang lebih ringkas. Ingat untuk menyemak dokumentasi Oracle pada paparan dalam talian boleh dikemas kini untuk mengesahkan keserasian.
Perbezaan utama terletak pada keperluan sintaks Oracle yang lebih ketat. Menamatkan pernyataan SQL dengan titik bertitik (;
) dengan betul adalah penting. Memahami peraturan Oracle untuk paparan dalam talian boleh dikemas kini adalah penting untuk kemas kini berbilang baris yang berjaya. Dengan menggunakan kaedah alternatif ini, anda boleh melaksanakan UPDATE
pertanyaan dengan INNER JOIN
dalam Oracle dengan berkesan dan mengelakkan ralat ORA-00933.
Atas ialah kandungan terperinci Bagaimana untuk membetulkan kesilapan ORA-00933 dalam pertanyaan kemas kini Oracle dengan gabungan dalaman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!