Как удалить данные во всех дочерних таблицах, включая родительскую таблицу.
У меня есть несколько таблиц, имеющих ограничительные отношения с внешними ключами, как показано ниже:
1.parent_table id(первичный ключ)
2.parent_child основные достижения и итоговые документы(первичный ключ) и ID(справка из parent_table)
3.ребенок ch_id(первичный ключ) и основные достижения и итоговые документы(справка из parent_child стол)
Теперь мне нужно удалить запись из parent_table, в том числе с дочерними таблицами, которые имеют одну и ту же запись. Но здесь я получаю вызов-parent_table ссылается на таблицу parent_child, но таблица parent_child ссылается на дочернюю таблицу с другим столбцом.
Как я могу определить точное значение из дочерних таблиц, чтобы удалить эту конкретную запись?
Заранее спасибо.
Что я уже пробовал:
create table parent(id number primary key,name varchar2(30)); create table parent_child(c_id number primary key,id number,name varchar2(30)); ALTER TABLE parent_child ADD CONSTRAINT parent_child_fk FOREIGN KEY (id) REFERENCES parent(id); create table child(ch_id number primary key,c_id number,name varchar2(30)); ALTER TABLE child ADD CONSTRAINT child_fk FOREIGN KEY (c_id) REFERENCES parent_child(c_id); I have tried below query to find the tables: <pre> SELECT DISTINCT LEVEL, PT AS "TNAME",COLUMN_NAME FROM (SELECT A.OWNER W1, A.table_name PT, A.constraint_name C1, A.r_constraint_name R1, B.OWNER W2, B.table_name CT, B.constraint_name C2, B.r_constraint_name R2, C.COLUMN_NAME FROM ALL_CONSTRAINTS A, all_constraints B,ALL_CONS_COLUMNS C WHERE (A.constraint_name = b.r_constraint_name(+)) AND A.CONSTRAINT_NAME=C.CONSTRAINT_NAME AND A.OWNER = UPPER ('USER') AND B.OWNER(+) = UPPER ('USER') AND A.r_constraint_name IS NULL AND A.constraint_type IN ('P', 'R')) V1 START WITH PT = UPPER ('PARENT') CONNECT BY PRIOR CT = PT AND LEVEL <= 10 ORDER BY LEVEL
:: Этот запрос возвращает только имена столбцов.. Я хотел бы поместить этот запрос в неявный курсор и найти значения со значением столбца родительской таблицы.
Maciej Los
Что ж... вы должны решить, чего вы хотите достичь: как только вы скажете: "я хочу удалить, но позже: "найти значения"...