Zitat Zitat von dschroeder Beitrag anzeigen
Guten Morgen in die neue Woche!

Ich hätte nicht gedacht, dass eine Transaktion in einer Datenbanksprache wie SQL ein Problem sein würde. Wenn ich das alles lese, glaube ich allerdings, dass ich es in meinem Fall auch ohne Transaktion gehen wird.

Zu dem Thema, ob die UDF nicht eine UPD sein müsste und dass Funktionen nur (einzelne) Daten lesen sollten:

Ich sehe zwischen Funktionen und Procedures keinen gravierenden Unterschied. Eine Funktion hat den Vorteil, dass man zusätzlich zu den Input-Parametern noch einen Rückgabewert bekommt. Das ist hilfreich, weil ich bei Schreiboperationen gerne einen Erfolg oder Misserfolg der Operation zurückbekommen möchte.

Außerdem kann ich Funktione auch im interaktiven SQL einsetzen. Bei UDPs geht das ja nicht bzw. es macht meistens keinen Sinn, da ich ja keine Rückgabewerte bekomme.
... die Transaktionen sein zu lassen, ist nicht die Lösung, sondern ein neues Problem!!! Mit commit *NONE, wie hier häufig empfohlen, hat SQL auf der AS/400 kein zureichendes Sperrkonzept!
Functions sollten grundsätzlich nichts schreiben, wer rechnet in einem select schon damit, dass da geschrieben wird. Eine procedure updateIrgendwas soll schließlich auch nichts löschen!!! In der Denke von SQL wird Erfolg oder Misserfolg durch den SQLCODE bzw. SQLSTATE kommuniziert. Irgendwelche Rückgabevariablen, die Misserfolg signalisieren, sind auch in RPG Murks!!!
Programme via SQL interaktiv aufzurufen sollte man tunlichst bleiben lassen, da werden ganze Scheunentore aufgemacht. SQL ist auch keine taugliche Programmiersprache, das fängt schon bei dem ganzen rudimentären Konzept von Errorhandling an. SQL ist eine Sprache zur Kommunikation mit der Datenbank und sonst nix.

D*B