SQL / DB2 - Wert abrufen und aktualisieren/Inkrement gleichzeitig

Ich bin die Verbindung zu einer DB2-Datenbank und ausführen von SQL-Anweisungen.

Ein Beispiel von, was getan wird:

select field from library/file
  [program code line finishes executing]
  [increment value by one]
update library/file set field = 'incremented value'

Habe ich eine brauchen, um sofort aktualisieren Sie den Wert während der Rückkehr den Wert. Anstatt zu warten, bis das Skript abgeschlossen ist, und führen Sie dann einen separaten UPDATE-Anweisung.

Das Konzept, was ich gerne tun würde, ist dieses:

select field from library/file; update library/file set field = (Current Value + 1); go;

Bitte beachten Sie... das ist nicht die gängige SQL-Datenbank, die die meisten wohl kennen, es ist eine DB2-Datenbank auf einer IBM i.

Dank!

  • Klarstellung: DB2 ist eine SQL-Datenbank. Es ist einfach eine andere Implementierung von SQL als die, die Sie gewohnt sind.
  • Dank Dan, ich habe klargestellt, dass es sich nicht um einen "normalen" sql-Datenbank":)
  • Sie sind mit dem Wert des Feldes in Ihrem Programm? Wenn ja, können Sie besser dran, unter Verwendung einer gespeicherten Prozedur (mit Isolationsstufe für die Transaktion) für diese. Wenn nicht, einfach eine regelmäßige UPDATE - Anweisung. Auch gehe ich davon aus, dass Sie irgendwie sorgt für eine einzigartige Zeile ausgewählt/aktualisiert, oder es könnte interessant sein fallout. Warum sind Sie Inkrementieren den Wert auf diese Weise, obwohl? Was bist du eigentlich?
  • Ja, ich benutze den zurückgegebenen Wert in meinem Programm, erhöhen diese Zahl um 1, und aktualisieren Sie die Aufzeichnung mit dem inkrementierten Wert. Es gibt nur 1 Spalte und 1 Zeile in dieser Tabelle. Es ist einziger Zweck ist, um eine "nächste Zahl" Art der Funktion für eine einzelne Anwendung. Dass ein SP erstellt eine alternative, würde aber erfordern eine DB2 / RPG-Entwickler sind, würde ich eher finden, eine isolierte Lösung, die ich umsetzen konnte mich.
  • ... Wirklich, das ist eine schreckliche Idee. Sie sollten mit so genannten SEQUENZ, die im Grunde macht dies automatisch. Vor allem, weil, wenn Sie eine concurrent-Umgebung, müssen Sie sperren, um den Zugriff auf die Tabelle (oder Sie bekommen Sie doppelte Werte) - dies bedeutet, dass beim einfügen mit diesem Wert wäre, serial, sodass einige den Vorteil einer gleichzeitigen Umgebung. Wenn Sie in der Lage sind, um eine Tabelle zu erstellen, ohne ein DBA... sollten Sie zumindest laufen Ihre Idee, an Ihnen vorbei.
  • Schön, dass scheint, wie es wäre eine Lösung für mein problem. Wenn Sie einen Beitrag, der als Antwort mit einigen Details, die ich ' ll markieren Sie diese als erledigt.
  • DB2 - ist eine normale SQL-Datenbank.
  • Gespeicherte Prozeduren können in SQL geschrieben, so ein RPG-Programmierer ist nicht unbedingt erforderlich. Aber es ist immer gut zu prüfen, mit Ihrem DBA. (Ich sage dies als einer 😉
  • Siehe auch diese Frage: Ist es möglich das generieren eines eindeutigen numerischen Wertes für jede Zeile in einem iSeries-Tabelle ohne Schleife?

InformationsquelleAutor adam | 2013-01-16
Schreibe einen Kommentar