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

ORA-00933:Perintah SQL tidak diakhiri dengan benar saat menghapus dua tabel secara bersamaan

Anda tidak dapat menghapus dari dua tabel dalam satu pernyataan - tidak ada penghapusan yang setara dengan insert all . (Kecuali Anda memiliki batasan yang mengalirkan penghapusan, atau pemicu yang melakukannya secara manual). Dokumentasi menunjukkan bahwa sintaks Anda tidak valid, karena tidak ada jalur untuk menentukan lebih dari satu tabel.

Anda harus memiliki dua pernyataan hapus, menghapus catatan dari tabel anak terlebih dahulu:

  DELETE FROM login 
  WHERE login.id_user_login = p_id_user;
  DELETE FROM users
  WHERE users.id_user = p_id_user;

Anda bisa ubah batasan kunci asing Anda menjadi delete cascade :

alter table login add constraint login_fk_user foreign key (id_user_login)
references users(id_user) on delete cascade;

... yang berarti Anda hanya perlu menghapus secara eksplisit dari users meja; tetapi itu mungkin bukan yang Anda inginkan, karena menghapus satu tingkat validasi - Anda mungkin ingin mencegah kunci induk dihapus secara tidak sengaja jika memiliki anak. Mengeluarkan dua penghapusan tidak terlalu merugikan di sini.

Kebetulan, prosedur pertama Anda tidak melakukan, yang mungkin Anda harapkan. Di baris ini:

    ...
    SELECT * FROM DUAL COMMIT;

... COMMIT ditafsirkan sebagai alias untuk DUAL tabel, bukan perintah terpisah. Anda akan membutuhkan titik koma setelah DUAL , dan sebaiknya baris baru untuk COMMIT; . Tapi umumnya dianggap lebih baik tidak untuk melakukan dalam prosedur, dan membiarkan pemanggil tingkat atas memutuskan apakah akan melakukan atau memutar kembali untuk menjaga integritas data.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GALAT:Referensikan penghitung sebagai target tugas - PL/SQL

  2. Nonaktifkan pemicu masuk di Oracle

  3. SQL Semua Kemungkinan Kombinasi Round Robin antara dua Tabel

  4. Cara terhubung ke Oracle menggunakan JRuby &JDBC

  5. hubungkan dengan klausa di regex_substr