Zum Inhalt springen

Oracle-Trigger bei 1:n Insert - wie löst man das?


Wurmi

Empfohlene Beiträge

Hallo,

kann mir jemand bei einem Trigger-Problem in Oracle helfen? Ich möchte gerne bei Belegbuchungen (INSERTS, vielleicht später auch bei UPDATE und DELETE) in der Lage sein, per Trigger weitere Tabellen zu beschreiben. Mein Problem ist, daß ich mit dem klassischen for-each-row-Trigger bei INSERT-Vorgängen nicht weiterkomme.

Die Tabellen, um die es geht, sind (vereinfacht) so strukturiert wie unten. Es ist nicht die genaue Oracle-Syntax, weil ich das hier aus dem Kopf aufschreibe, aber in Wirklichkeit sind die CREATE-TABLE-Anweisungen und die ganzen Constraints und Foreign-Keys syntaktisch und semantisch korrekt.

Tabelle KOPF:

-VORGANG CHAR(1) NOT NULL

-BUKRS CHAR(2) NOT NULL

-BELNR NUMBER(6,0) NOT NULL

-KUNDE CHAR(4) NOT NULL

-BUDAT DATE NOT NULL

PRIMARY KEY (VORGANG, BUKRS, BELNR)

Tabelle ZEILEN:

-VORGANG CHAR(1) NOT NULL

-BUKRS CHAR(2) NOT NULL

-BELNR NUMBER(6,0) NOT NULL

-BUZEI NUMBER(3,0) NOT NULL

-KONTO CHAR(3) NOT NULL

-MATNR VARCHAR(5)

-MENGE NUMBER(10,1)

-BETRAG NUMBER(10,2) NOT NULL

-ZTEXT VARCHAR(50) NOT NULL

PRIMARY KEY (VORGANG, BUKRS, BELNR, BUZEI)

FOREIGN KEY(VORGANG, BUKRS, BELNR) REFERENCES KOPF (VORGANG, BUKRS, BELNR)

Eine Buchung für einen neuen Beleg ist immer ein Kopf und mindestens eine Zeile und wird in eine Transaktion gekapselt.

Beispiel:

BEGIN TRANSACTION


INSERT INTO KOPF(VORGANG, BUKRS, BELNR, KUNDE, BUDAT)

VALUES ('A', '01', 4711, 'AB23', SYSDATE)


INSERT INTO ZEILEN(VORGANG, BUKRS, BELNR, BUZEI, KONTO, BETRAG, ZTEXT)

VALUES ('A', '01', 4711, 1, '100', 800.00, 'Rechnung')


INSERT INTO ZEILEN(VORGANG, BUKRS, BELNR, BUZEI, KONTO, MATNR, MENGE, BETRAG, ZTEXT)

VALUES ('A', '01', 4711, 2, '300', 'ABCD1', -19.4, -500.00, 'Makkaroni')


INSERT INTO ZEILEN(VORGANG, BUKRS, BELNR, BUZEI, KONTO, MATNR, MENGE, BETRAG, ZTEXT)

VALUES ('A', '01', 4711, 3, '400', 'CDEFG', -3.5, -300.00, 'Rigatoni')


COMMIT TRANSACTION
To-Do: Es soll für jede Zeile ein Trigger feuern und mit den Werten aus der Zeile ggfalls. weitere Tabellen gefüllt werden. Allerdings braucht es zum Füllen dieser Tabellen auch Werte aus dem Belegkopf (also quasi die Daten aus dem Join von Belegkopf und Belegzeile): Beispiel: Etwa sollte aus dem Beispiel oben der Kunde (aus dem Kopf) und die Kontonummer (aus der Zeile) abgefragt werden und bei einer bestimmten Konstellation in eine offene-Posten-Tabelle angefügt werden:
INSERT INTO KUNDENOPS (BELNR, KUNDE, BUDAT, Betrag)

VALUES (kopf.BELNR, kopf.KUNDE, kopf.BUDAT, zeilen.Betrag)

Eine Abfrage der Kopf-Werte aus der Datenbank geht nicht, weil der Kopf ja noch gar nicht existiert (~die Transaktion ist noch nicht fertig). Und da komme ich nicht weiter.

Ich möchte das Problem aber ungern im Anwendungsprogramm lösen, sondern direkt in der Datenbank, vor allem weil es u.U. verschiedene Clients geben wird mit unterschiedlichen Plattformen (JDBC, ADO), aber die Logik hingegen immer die gleiche sein soll. Kann mir vielleicht einer sagen, wie man so etwas löst. Dafür vielen Dank im voraus.

Grüße

Wurmi

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...