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

Изтриване на редове от родителски и дъщерни таблици

Два възможни подхода.

  1. Ако имате външен ключ, декларирайте го като on-delete-cascade и изтрийте родителските редове, по-стари от 30 дни. Всички дъщерни редове ще бъдат изтрити автоматично.

  2. Въз основа на вашето описание изглежда, че знаете родителските редове, които искате да изтриете, и трябва да изтриете съответните дъщерни редове. Опитвали ли сте SQL като този?

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

    -- сега изтрийте записите на родителската таблица

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

---- Въз основа на вашето изискване изглежда, че може да се наложи да използвате PL/SQL. Ще видя дали някой може да публикува чисто SQL решение за това (в този случай това определено ще бъде начинът).

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. EM 12c Регулиране на праговите стойности

  2. Как мога да избера записи САМО от вчера?

  3. Как да конфигурирам DbContext да работи с Oracle ODP.Net и EF CodeFirst?

  4. Инструкция UPDATE в Oracle с помощта на SQL или PL/SQL за актуализиране САМО на първия дублиран ред

  5. Поведение по подразбиране за автоматично завършване на JDBC връзката