Witam.
Mam dwie tabele, które powiązane są ze sobą 1 do 1. Chciałbym przy pomocy jednego polecenia usunąć wszystkie rekordy w obu tabelach od 1500 do końca. Mój pseudokod:
DELETE FROM tableA, tableB
WHERE tableAID > 1500 AND tableBID > 1500
Witam.
Mam dwie tabele, które powiązane są ze sobą 1 do 1. Chciałbym przy pomocy jednego polecenia usunąć wszystkie rekordy w obu tabelach od 1500 do końca. Mój pseudokod:
DELETE FROM tableA, tableB
WHERE tableAID > 1500 AND tableBID > 1500
Jeśli masz tabele połączone kluczem obcym to możesz w tej tabeli gdzie masz zdefiniowany klucz obcy dodać opcję ON DELETE CASCADE, co spowoduje że usuwając rekordy z tabeli od razu zostaną usunięte powiązane rekordy z drugiej tabeli. Ehh późno już mam nadzieję że w miarę się wysłowiłem.
wprowadzenie w tabeli klauzury on delete cascade do usuwania wierszy potomnych
create table tableA (
tableAID number primary key
);
create table tableB (
tableBID number,
foreign key (tableBID) references tableA(tableAID) on delete cascade
);
przykładowe wypełnienie tabeli
declare i number;
begin
i:=0;
for i in 1 .. 10000 loop
insert into tableA values
( i );
end loop;
commit;
end;
/
usuniecie rekordów:
delete from tableA where tableA.tableAID>1500
Sprawdzenie poprawności działania instrukcji delete
select * from tableb where tableb.tablebID>1500 order by tablebID asc