Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle - изтриване на всички дъщерни записи за родител

Това е почти това, което първични ключове и външни ключове и клаузи като ON DELETE CASCADE са за. Ако не е твърде късно, можете да опитате да добавите PK и FK ограничения, преди да извършите изтривания; тогава всичко ще бъде лесно.

ДОБАВЕНО :Въз основа на допълнителна дискусия. Заявката по-долу може да се използва за намиране на всички наследствени таблици на родителска таблица. Заявката вероятно може да бъде подобрена по много начини, но може да е добра отправна точка.

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;

Таблицата "родител" в този случай е EMPLOYEES и името се появява два пъти на един и същи ред. Това може да се превърне в свързваща променлива, ако е необходимо. Използвах EMPLOYEES (забележка:трябва да е с главни букви, защото това е начинът, по който стойностите на низовете се съхраняват в системните таблици), защото изпълних това на стандартната HR схема; изход:

  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. Как да създадете множество връзки на схема с помощта на Java?

  2. Групово вмъкване в Oracle с помощта на .NET

  3. ORA-00942:таблица или изглед не съществува (приложение ColdFusion)

  4. Отключете администраторския акаунт на apex

  5. Използване на Dapper със съхранени процедури на Oracle, които връщат курсори