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

Oracle - hapus semua catatan anak untuk orang tua

Ini adalah kunci utama dan kunci asing dan klausa seperti ON DELETE CASCADE adalah untuk. Jika belum terlambat, Anda dapat mencoba menambahkan batasan PK dan FK sebelum melakukan penghapusan; maka semuanya akan mudah.

DITAMBAHKAN :Berdasarkan pembahasan lebih lanjut. Kueri di bawah ini dapat digunakan untuk menemukan semua tabel turunan dari tabel induk. Kueri mungkin dapat ditingkatkan dalam banyak hal, tetapi ini mungkin merupakan titik awal yang baik.

with f as (
        select constraint_name, table_name, r_constraint_name
        from   user_constraints
        where  constraint_type = 'R'
     ),
     p as (
        select constraint_name, table_name
        from   user_constraints
        where  constraint_type = 'P'
     ),
     j (child_table, f_key, parent_table, p_key) as (
        select f.table_name, f.constraint_name, p.table_name, f.r_constraint_name
        from   p join f on p.constraint_name = f.r_constraint_name
        union all
        select 'EMPLOYEES', (select constraint_name from p 
                                where table_name = 'EMPLOYEES'), null, null from dual
     )
select level as lvl, j.*
from j
start with parent_table is null
connect by nocycle parent_table = prior child_table
order by lvl, parent_table, child_table;

Tabel "induk" dalam hal ini adalah EMPLOYEES dan namanya muncul dua kali, pada baris yang sama. Itu dapat dibuat menjadi variabel pengikat jika diperlukan. Saya menggunakan EMPLOYEES (catatan:harus dalam huruf kapital semua karena begitulah nilai string disimpan dalam tabel sistem) karena saya menjalankan ini pada skema HR standar; keluaran:

  LVL CHILD_TABLE       F_KEY                PARENT_TABLE      P_KEY
----- ----------------- -------------------- ----------------- -----------------
    1 EMPLOYEES         EMP_EMP_ID_PK
    2 DEPARTMENTS       DEPT_MGR_FK          EMPLOYEES         EMP_EMP_ID_PK
    2 JOB_HISTORY       JHIST_EMP_FK         EMPLOYEES         EMP_EMP_ID_PK
    3 JOB_HISTORY       JHIST_DEPT_FK        DEPARTMENTS       DEPT_ID_PK


  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 Oracle NetSuite Advanced PDF Template memiliki Fungsi Group by dan SUM?

  2. Memanggil Fungsi PL SQL dengan parameter objek di java

  3. Oracle - pilih kolom tertentu dari kursor ref

  4. Penggunaan Oracle tipe data PANJANG secara ilegal

  5. Kesalahan fatal:Panggilan ke fungsi yang tidak ditentukan oci_connect()