Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

Schuss ins blaue, müsste das nichit "Before Delete" sein?

Ein Datensatz wird gelöscht. D.h. er ist noch da, nun hängst Du die Referenzen um, in dem Du aus dem zu löschenden die ID liest und in die Kinder schreibst. Erst wenn das durch ist, löschst Du den Datensatz weg

HTH Phil

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.