Transaktionen mit SQLJ

ClaudeGable

Neuer Benutzer
Beiträge
4
Hallo,

ich habe bisher folgendes Datenbankschema mit dem zugehörigen Tabellen definiert:

CREATE SCHEMA BamMolk;

CREATE TABLE “BamMolk”.Lieferant(
LiefNr INTEGER PRIMARY KEY IS NOT NULL,
Name VARCHAR (50)
);

CREATE TABLE “BamMolk”.Artikel(
ArtNr INTEGER PRIMARY KEY IS NOT NULL,
Bezeich VARCHAR (50)
);

CREATE TABLE “BamMolk”.Lager(
LagNr PRIMARY KEY IS NOT NULL,
Lagerort VARCHAR (50)
);

CREATE TABLE “BamMolk”.ArtLiefLag(
LiefNr INTEGER IS NOT NULL,
ArtNr INTEGER IS NOT NULL,
LagNr INTEGER IS NOT NULL,
PRIMARY KEY (LiefNr, ArtNr, LagNr),
FOREIGN KEY (LiefNr) REFERENCES Lieferant (LiefNr) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (ArtNr) REFERENCES Artikel (ArtNr) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (LagNr) REFERENCES Lager (LagNr) ON DELETE CASCADE ON UPDATE CASCADE,
);​

Nun meine erste Frage: Ist dies (syntaktisch) korrekt?

Meine zweite Frage: Für den nächsten Teil der Aufgabe sollen 4 Transaktionen spezifiziert werden - unter der Annahme, dass SQLJ zur Verfügung steht, also IF/ELSE-Anweisungen genutzt werden können.

Die Transaktionen lauten folgendermaßen:

  1. Es soll ein neuer Artikel Frankenkäse in das Sortiment aufgenommen werden, der von einem in der Datenbank gespeicherten Lieferanten Huberhof stammt und am bereits vorhandenen Lager Bamberg-Hafen geführt wird.
  2. Es soll ein neuer Artikel Der herzhafte Jura in das Sortiment aufgenommen werden, der von einem bislang nicht in der Datenbank gespeicherten Lieferanten Molkerei Rennsteig stammt und am neuen Lager Bamberg-Süd geführt wird.
  3. Für den Frankenkäse soll der Lieferant Huberhof gegen den bereits bekannten Lieferanten Molkereigenossenschaft AG getauscht werden.
  4. Die Datenbank soll bereinigt werden. Dazu sollen alle Lieferanten gelöscht werden, die derzeit in keiner Lieferbeziehung stehen.
Da ich in Java nicht so bewandert bin, stehe ich nun erst mal auf dem Schlauch und hoffe, dass mir hier im Forum auf die Sprünge geholfen werden kann.

Danke und viele Grüße
 
Werbung:
Ja.

  • für solche PK's eignent sich (BIG) SERIAL's ganz gut
  • " und gRoSs/kLeInScHrEiBuNg ist ätzend
  • bei Verwendung von (BIG)SERIAL für die PK's könnte man die ganzen Aktionen wie 2. in einem einzelnen SELECT gemacht werden - das ist damm immer in EINER Transaktion. (WITH, writeable Common Table Expressions)
 
Ne, es geht laut Aufgabenstellung wirklich um SQLJ. Aber egal...ich will das erstmal nur mit SQL umsetzen.

Ich habe die Tipps von akretschmer umgesetzt (SERIAL etc.)
Habe mir nun für die 1. Transaktion folgende Ausdrücke gebaut. Allerdings weiß ich nicht wie ich nun COMMIT etc. anwenden. Könnt ihr mir da helfen?

INSERT INTO BamMolk.lieferant (name)
VALUES ('Huberhof');
INSERT INTO BamMolk.lager (lagerort)
VALUES ('Bamberg-Hafen');
INSERT INTO BamMolk.artikel (bezeich)
VALUES ('Frankenkäse');
INSERT INTO BamMolk.artlieflag (artnr)
SELECT artnr FROM BamMolk.artikel
WHERE bezeich = 'Frankenkäse';
INSERT INTO BamMolk.artlieflag (liefnr)
SELECT artnr FROM BamMolk.lieferant
WHERE bezeich = 'Huberhof';
INSERT INTO BamMolk.artlieflag (lagnr)
SELECT lagnr FROM BamMolk.lager
WHERE lagerort = 'Bamberg-Hafen';​
 
Werbung:
solange Du nicht via BEGIN; eine TX startest, erfolgt jedes Statement in einer eigenen TX. Wenn Du mit BEGIN; eine TX startest, dann entweder mit COMMIT; bestätigen oder mit ROLLBACK; zurückrollen. Dies bezieht sich dann auf alles seit dem BEGIN; Beendet sich der Client, ist das impliziet ein ROLLBACK.

Grüße aus München.
 
Zurück
Oben