Zum Inhalt springen

Trigger auf DELETE PL/SQL


oli001

Empfohlene Beiträge

Hi,

habe folgendes Problem, vielleicht kann mir da jemand auf die Sprünge helfen:

Ich habe folgende TAbelle:

id name parentId

1 aaa 0

2 bbb 0

3 ccc 1

10 eee 3

11 ddd 3

12 fff 3

So nun möchte ich einen Trigger, der es ermöglicht, dass wenn eine Zeile gelöscht in alle Zeilen geschaut wird und die parentId durch die parentId der gelöschen Zeile ersetzt wird. Aber nur dann wenn die parentId der Zeile die der id der gelöschten Zeile entspricht.

Also nix anderes als Dereferenzieren.

Dachte mir das so:

CREATE OR REPLACE TRIGGER msystem.remove_sub_menu

AFTER DELETE

ON msystem.apps

REFERENCING NEW AS NEW OLD AS OLD

FOR EACH ROW

DECLARE

tmp DATE;

BEGIN

UPDATE apps

SET id = :OLD.parent_id

WHERE id = :OLD.menu_id;

EXCEPTION

WHEN OTHERS

THEN

-- Consider logging the error and then re-raise

RAISE;

END remove_sum_menu;

/

Klappt aber net, weil der Trigger noch aktiv ist, da kann man dann scheinbar nicht in die Tabelle schreiben.

Kann mir da jemand auf die Sprünge helfen?

Grüße Oli

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

Du kannst in einem Rowlevel Trigger weder auf die sich gerade ändernde Tabelle zugreifen noch sie ändern. Ich hab hierzu auch einen kleinen Artikel geschrieben, der die Problematik erklärt:

Mutating Table - SQL-Tips.de

Kurz gesagt: Das was Du vorhast ist per Trigger nicht zu bewerkstelligen.

Was Du hier machst sieht mir eher so aus, als ob Du einen Foreign key Constraint Ersatz per Hand pflegen möchtest. Das wär doppelt falsch.

Leg in der übergeordneten Tabelle einen PK Constraint an, dann einen FK Constraint in der untergeordneten Tabelle und zwar mit der Option ON DELETE SET NULL.

Ich denke, dass macht das was Du beabsichtigst.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...