Ich habe einen Fremdschlüssel in der Tabelle B auf die Tabelle A. Was ich will, ist auf Datensatz in A entfernen, verwenden Sie Kaskade löschen ODER Kaskadierung gesetzt NULL im FK Feld in B hängt von der Wert in einer Spalte dieses Datensatzes, der entfernt werden sollte.Orakel auf löschen Kaskade mit Bedingung
Soweit ich Zustand in löschen Kaskade verwenden kann nicht, war meine Ideen immer Kaskade SET NULL zu verwenden, und fügen Sie Trigger Tabelle B
AFTER UPDATE..
FOR EACH ROW
BEGIN
IF :new.a = 1 THEN
DELETE FROM B WHERE ID = :new.id
ENDIF;
END;
Aber ich eine Fehlermeldung erhalten, smthing wie „Tisch mutiert, Trigger/Funktion kann es nicht sehen ". So
, ich habe meine if-else zu Prozeduraufruf
AFTER UPDATE
BEGIN
cleanup_table_b();
END;
create or replace procedure cleanup_table_b
IS begin
DELETE FROM B WHERE a = 1;
end;
geändert
aber immer noch einen Fehler ORA-04091, ORA-06512, ORA-04088
Die Geschäftsidee davon bekommen, Sind die Datensätze in B immer noch nützlich (nicht durch Fremdschlüssel) oder nicht, so möchte ich eine Bereinigung durchführen und Nutzungsdatensätze entfernen.
Verwenden Sie einen Trigger zum Löschen in Tabelle A, um die referenzierenden Datensätze zu löschen oder null zu setzen in Tabelle B. – Rene
@Rene ja, aber das macht einen Tisch um einen anderen zu halten. Bessere Struktur Lösung wäre, wenn eine Tabelle sich selbst pflegen kann – user1448906
Sie müssen erklären, warum Sie denken, dass das "besser" ist. – Rene