sql >> Database >  >> RDS >> Oracle

Oracle - verwijder alle onderliggende records voor een ouder

Dit is ongeveer wat primaire sleutels en externe sleutels en clausules zoals ON DELETE CASCADE zijn voor. Als het nog niet te laat is, kun je proberen PK- en FK-beperkingen toe te voegen voordat je iets verwijdert; dan zal alles gemakkelijk zijn.

TOEGEVOEGD :Op basis van verdere discussie. De onderstaande query kan worden gebruikt om alle onderliggende tabellen van een bovenliggende tabel te vinden. De zoekopdracht kan waarschijnlijk op veel manieren worden verbeterd, maar het kan een goed startpunt zijn.

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;

De "bovenliggende" tabel is in dit geval WERKNEMERS en de naam verschijnt twee keer, op dezelfde regel. Daar kan indien nodig een bindvariabele van worden gemaakt. Ik gebruikte EMPLOYEES (let op:het moet in hoofdletters zijn, want zo worden stringwaarden opgeslagen in systeemtabellen) omdat ik dit op het standaard HR-schema draaide; uitgang:

  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. Automatische conversie van SQL-query naar ElasticSearch-query

  2. Lijst van alle tijdelijke tabellen in SQLite

  3. Items schrijven naar een MySQL-database in Scrapy

  4. Toegang tot samengevoegde elementen