-
SQL update
Hallo Forum.
mit folgender RPG-Anweisung
wird aus einer "Zähler-Datei" die nächste
Rechnungsnummer ermittelt:
Key Chain Datei
If %Found
eval RENR = RENR + 1
update Datei
endif
Das möchte ich mit EINER Sql-Anweisung erledigen.
C/EXEC-SQL
C+ update Datei set RENR = RERN + 1 where...
C/END EXEC
Der update funktioniert, aber wie stelle ich dem Pgm die um 1 erhöhte RENR zur Verfügung?
Gruss Joe
-
Nun, SQL funktioniert hier wie bei der normalen Dateiverarbeitung, mittels:
C/exec sql
c+ select renr into :myrenr from file where ...
c/end-exec
Ohne Commit-Steuerung gibts natürlich ein Problem, dass zwischen Update und Select ein anderes Programm bereits weitergezählt hat.
Dann geht es nur mit einem Cursor:
declare mycursor for select renr from file where ... for update
open mycursor
fetch into :myrenr
set :myrenr = :myrenr + 1
update myfile set renr=:myrenr where current of mycursor
Dies entspricht im weitesten der RPG-Logik.
-
Hallo Joe,
in einem SQL-Statement geht das nicht.
Aber, was willst Du erreichen?
Ein einziges SQL-Statement, statt 5 RPG-Statements plus F-Bestimmungen?
In diesem Fall würde ich mir eine Funktion basteln, die die neue Rechnungs-Nr. zurückgibt und die Zähler-Datei fortschreibt.
Birgitta
-
Danke für die schnelle Hilfe.
Declare und Fetch liefert mir das richtige
Ergebnis. Mir war nicht bekannt, dass der
zuerst gelesene Satz bis zum Update bzw. Close gesperrt ist.
Der Tabellenzugriff soll per SQL erfolgen,
weil ich mit meinem Programm (VARPG)
die DB2/400 bzw. die DB2 auf einem Client
bedienen "können" muss.
Gruss Joe
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von B.Hauser:
Hallo Joe,
in einem SQL-Statement geht das nicht.
Aber, was willst Du erreichen?
Ein einziges SQL-Statement, statt 5 RPG-Statements plus F-Bestimmungen?
In diesem Fall würde ich mir eine Funktion basteln, die die neue Rechnungs-Nr. zurückgibt und die Zähler-Datei fortschreibt.
Birgitta[/quote]
-
Dass kann bei VARPG ggf. in die Hose gehen, da die Klausel "for update" AS/400-Spezifisch ist (daher auch die Satzsperre!).
Evtl. wird die Klausel ignoriert und die Satzsperre wird nicht gesetzt !
Desweiteren ist auch die Klausel beim Update "current of" ggf. nicht möglich.
Dies ist nur möglich, wenn "Serversite-Curser" verwendet werden !!
Ich würde dann, wie Birgitta empfiehlt, eine SQL-Funktion schreiben, die genau diese Probleme behebt.
Vorteil: Die Funktion läuft auf der AS/400, kann ein RPG-Programm sein und ist auch von VARPG verwendbar.
Similar Threads
-
By mk in forum NEWSboard Programmierung
Antworten: 13
Letzter Beitrag: 13-07-12, 08:53
-
By moskito in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 30-08-06, 17:30
-
By daniel.ludwig in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 21-07-06, 12:41
-
By wuwu in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-07-06, 15:31
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks