hotti: Perl Hashes sortieren

Beitrag lesen

hi,

Die Frage war, in welchen Fällen Exceptions durch die Datenbank geworfen werden.

Exceptions wirft der Layer, nicht die DB (wäre ja noch schöner, wenn der MySQL-Server in Quierschied mein Script abwürgt, was auf einem Server in Saarbrücken läuft *G). In Perl kannst Du den Layer anweisen, eine Exception zu  werfen oder keine Exception zu werfen und das bereits für den ersten Schritt: Dem Connect.

Alleine durch das Vorkommen von Transaktionen sehe ich noch keine Exceptions (Deadlocks mal ausgenommen). Jedes einzelne Statement für sich ist nur in den Fällen (a) und (c) kaputt, ein anderes Beispiel hast du mir nicht nennen können.

Freilich kannst Du nach jedem einzelnen Statement auch ohne eine Exception auszulösen, prüfen, ob ein Fehler aufgetreten ist. Betrachten wir folg. Statements einer kleinen Transaktion:

ST1: Übernimmt die Daten aus dem Warenkorb (eine Tabelle)
ST2: Schreibt die Daten in die Bestellung (zwei Tabellen)
ST3: Löscht den Warenkorb (Where=Session)
-> Commit, wenn alle 3 fehlerfrei sind

Eine Ex. tritt nirgendwo auf, wenn das nicht vereinbart wurde. Du musst jedoch in diesem Fall nach jedem einzelnen ST prüfen, ob es erfolgreich war, das ist bei 3 ST noch (!) überschaubar, aber es geht einfacher:

Setze RaiseError = 1; # erhebe jeden Fehler in den Status einer Exception

Im try-Block (eval in Perl) dürfen nun alle drei ST unmittelbar aufeinanderfolgend notiert werden. Sofern bei _einem_ ST ein Fehler auftritt, werden die nachfolgenden _nicht_ mehr ausgeführt, das Programm bleibt jedoch am Leben. Und was wäre jetzt einfacher, als _nur_noch_einmal_ abfragen zu müssen, ob eine Ex. geworfen wurde?

Zu Drittanbindungen: du hast explizit Datenbank-Exceptions

Nein. Ich meinte auch in meinem letzten Post nur den Layer.

Hotti

--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.