Mit Trigger Tupel löschen verhindern

Devil_Noe

Mitglied
Hi!

Ich bin absoluter Anfänger was DB Programmierung betrifft und hätte folgende Grundsatzfrage:

Ich suche eine Möglichkeit, mit der ich verhindern kann, dass ein Tupel aufgrund einer Exists/Not Exists Bedingung gelöscht wird:

Beispiel:

Relation Kunde
Relation Rechnung

Rechnungempfänger als Fremdschlüssel in Rechnung referenziert Kundennr in Kunde

Ich würde jetzt gerne, wenn die Abfrage

NOT EXISTS
(
SELECT * FROM Kunde k, Rechnung r
WHERE k. kundenNr =r.empfänger
);

true ist, das löschen erlauben, sonst nicht.
(Also Kunde darf nur gelöscht werden, wenn es keine zu ihm gehörende Rechnung gibt)

Stell ich das am Besten mit einem Trigger an??

Bei einer Assertion ist mir im Gegensatz nicht klar, wie ich die Bedingung rein an das Löschen eines Tupels knüpfe, da, so wie ich es verstanden habe, Create Assertion ja ebenso für Einfügen und Update gilt bzw überprüft wird.


Pls Help!
 
G

Gast2

Gast
Naja - wenn du ein vernünftiges Datenmodel hast und in der Tabelle die die Rechnungsdaten hält den Kunden als Fremdschlüssel hast kannst du den Kunden nicht löschen :)

Oder du wählst halt eine CASCADE - dann würden erst die Rechnungen und dann die Kunden gelöscht.

Setzt natürlich auch eine entsprechendes RDMBS (z.B. MYSQL mit innoDB Tables, Oracle, etc...) voraus ;)
 

Devil_Noe

Mitglied
Die Integritätsbedingungen und Constraints hab ich soweit durchblickt!
Ich verwende als Literatur derweilen Datenbanksysteme von Kemper/Eickler und SQL von Addisin-Wesley.

Alles gut erklärt darin nur die Trigger und Assertionen gar nicht.

ICh würde eine Möglichkeit suchen, mit der ich folgendes prüfen kann:

Relation 1
Relation 2
(keine Schlüsselbeziehungen)

Löschen aus Relation 1 soll nur möglich sein, wenn Relation 2 leer ist.

(Ich weiss, dass dies jetzt nich unbedingt sinnvoll erscheint, aber ich würd gerne den Ablauf verstehen und erfahren, ob dies überhaupt möglich ist in Oracle)

Also eine Trigger schreiben, diesen mit Bedingung BEFORE DELETE, im Trigger eine SQL Abfrage von Relation 2 mit NOT EXISTS, wenn Relation2 leer dann löschen, sonst Operation zurückweisen.

Hoffe ich hab jetzt nicht allzusehr verwirrt.

Thnx
 
G

Gast2

Gast
Keine Schlüsselbeziehungen? Wie weißt du denn dass die Rechnung zu einem Kunden gehört?

Aber sobald du das weißt, kannst du es mit einem Trigger machen.

Trigger auf die Tabelle in der du prüfen möchtest ob du löschen kannst, im Trigger Code dann einfach so etwas machen:

SQL:
!... PSEUDO PL/SQL ...!
SELECT COUNT(*) INTO myvar FROM Rechnungen where Kundennummer = NEW.kundennummer;
IF myvar = 0 THEN
  RAISE EXCEPTION;
END IF;

Aber wie gesagt, für sowas hat man Constraints! Macht im Endeffekt nichts anderes ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Error bei Trigger Datenbankprogrammierung 5
Kirby.exe Trigger Datenbankprogrammierung 2
M Sql Trigger Datenbankprogrammierung 7
OnDemand MySQL Trigger löst nicht aus bei Hibernate Update Datenbankprogrammierung 12
Dimax MySQL Trigger für eine Spalte Datenbankprogrammierung 5
D Trigger Datenbankprogrammierung 1
J SQL-Statement Trigger zeigt keine Wikrung PL/SQL Datenbankprogrammierung 2
P Trigger in DB Datenbankprogrammierung 1
T f:event preRenderView Trigger wird nicht ausgeführt Datenbankprogrammierung 4
M Oracle Trigger Datenbankprogrammierung 3
K Trigger Datenbankprogrammierung 9
S Oracle Trigger Datenbankprogrammierung 5
E Trigger ??? Datenbankprogrammierung 5
Landei Trigger in MS-SQL Datenbankprogrammierung 3
M Datenbank mit trigger Datenbankprogrammierung 17
P DatenBank trigger Datenbankprogrammierung 7
T MySQL: Trigger und Prozeduren erstellen Datenbankprogrammierung 4
B Es werden keine Tupel in Tabellen abgelegt Datenbankprogrammierung 2
Java.getSkill() Datensatz / Tupel automatisch nach xy Tagen / Stunden löschen Datenbankprogrammierung 7
S gesamte Tabelle löschen Datenbankprogrammierung 2
F SQLite Datensatz löschen Datenbankprogrammierung 13
R PostgreSQL JPA - Löschen und orphanRemoval Datenbankprogrammierung 6
B Mit Button einen Datensatz löschen Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
B Fortlaufende Nummer - Was tun bei löschen? Datenbankprogrammierung 6
R eclipselink - referenzierte Entity löschen Datenbankprogrammierung 0
P Indizes / Fremdschlüssel löschen Datenbankprogrammierung 2
H Oracle Aus Datenbank löschen Datenbankprogrammierung 6
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
A Ausgewählten Jtable Eintrag aus Db löschen Datenbankprogrammierung 9
reibi Derby/JavaDB Derby DB löschen Datenbankprogrammierung 5
P JPA- Entities bleiben nach dem Löschen (unsichtbar?) in der Datenbank Datenbankprogrammierung 6
J Datensätze löschen Datenbankprogrammierung 6
O Löschen vieler Datensätze mit Hibernate Datenbankprogrammierung 11
C Hibernate Datensatz löschen Datenbankprogrammierung 2
U Nur den ersten Datensatz löschen wenn mehrere gleiche da sind Datenbankprogrammierung 2
M Datenbankeintrag bleibt nach Löschen in JSP vorhanden Datenbankprogrammierung 8
L MySQL Einträge löschen schlägt fehl Datenbankprogrammierung 2
F hibernate_seqeunce reseten (löschen) Datenbankprogrammierung 2
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
M HSQLDB 2.0 - wie tmp-Verzeichnis löschen Datenbankprogrammierung 2
turmaline [Hibernate] @OneToOne: Löschen einer referenzierten Instanz Datenbankprogrammierung 2
G Oracle Zeile löschen Datenbankprogrammierung 2
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
D SQL : Objekte individuell löschen können Datenbankprogrammierung 5
R JPA, Spring, löschen einer Entity Datenbankprogrammierung 2
H MySQL Einträge löschen Datenbankprogrammierung 5
M Datensatz aus Datenbank löschen Datenbankprogrammierung 6
Antoras Zeile aus DB löschen und ID runterzählen Datenbankprogrammierung 8
C Objekte aus Datenbank löschen Datenbankprogrammierung 6
F Löschen einer Zeile Datenbankprogrammierung 4
G Mit Java-Programm Datenbank löschen/neu anlegen Datenbankprogrammierung 5
G Löschen eines Eintrages verbunden mit JList Datenbankprogrammierung 5
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
P Tabellen löschen Datenbankprogrammierung 4
O Size ResultSet betrachtete Zeilen "löschen" Datenbankprogrammierung 5
G MySQL Zeile löschen und gleich Optimieren Datenbankprogrammierung 6
T [jdbc] einen Eintrag aus mehreren Tabellen löschen (Batch) Datenbankprogrammierung 3
G mySQL: kaskadierendes Löschen Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben