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

Menghapus baris dari tabel induk dan anak

Dua kemungkinan pendekatan.

  1. Jika Anda memiliki kunci asing, nyatakan sebagai kaskade saat dihapus dan hapus baris induk yang lebih lama dari 30 hari. Semua baris anak akan dihapus secara otomatis.

  2. Berdasarkan deskripsi Anda, sepertinya Anda mengetahui baris induk yang ingin Anda hapus dan perlu menghapus baris turunan yang sesuai. Sudahkah Anda mencoba SQL seperti ini?

      delete from child_table
          where parent_id in (
               select parent_id from parent_table
                    where updd_tms != (sysdate-30)
    

    -- sekarang hapus catatan tabel induk

    delete from parent_table
    where updd_tms != (sysdate-30);
    

---- Berdasarkan kebutuhan Anda, sepertinya Anda mungkin harus menggunakan PL/SQL. Saya akan melihat apakah seseorang dapat memposting solusi SQL murni untuk ini (dalam hal ini pasti akan menjadi jalan yang harus ditempuh).

declare
    v_sqlcode number;
    PRAGMA EXCEPTION_INIT(foreign_key_violated, -02291);
begin
    for v_rec in (select parent_id, child id from child_table
                         where updd_tms != (sysdate-30) ) loop

    -- delete the children
    delete from child_table where child_id = v_rec.child_id;

    -- delete the parent. If we get foreign key violation, 
    -- stop this step and continue the loop
    begin
       delete from parent_table
          where parent_id = v_rec.parent_id;
    exception
       when foreign_key_violated
         then null;
    end;
 end loop;
end;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah urutan tabel yang dirujuk dalam klausa ON pada JOIN penting?

  2. Apa yang setara dengan SQL Server APPLY di Oracle?

  3. Hapus semua catatan kecuali yang terbaru?

  4. Mengapa nama tabel/kolom/indeks Oracle dibatasi hingga 30 karakter?

  5. Oracle membandingkan cap waktu dengan tanggal