-
Hallo,
bevor Du irgendwas anderes versuchst, füge zunächst ein paar Blanks ein, vor allem beim ROUND-Befehl, nach dem Komma.
(Kann auch sein, dass die Anzeige hier im Forum sie verschluckt hat!)
SQL interpretiert solche die Angaben ,Zahl als Dezimalstelle und kommt damit ins schleudern.
Vielleicht war das das Problem:
PHP-Code:
C/EXEC SQL
C+ UPDATE LIB/FILE SET
C+ FELD3 = round((100/FELD2), 4) * FELD1 * -1
C+ WHERE FELD 2 > 0 AND FELD1 > 0
C/END-EXEC
-
Danke für die schnelle Antwort.... Leider kein Erfolg.
FELD3 = round((100/FELD2), 4) klappt problemlos (auch ohne Runden).
Sobald die 1. Multiplikation ins Spiel kommt erscheint der Fehler.
Mit diesen Zahlen passierts:
F1 = 2298.9
F2 = 212.5
auch diese Felder sind definiert mit Packed 17,6.
Wie bereits erwähnt, interaktiv wird alles berechnet wie gewünscht.
Haben wir eventuell ein Problem mit dem PTF Stand? Wir arbeiten mit R5V3
-
Das Problem sind auch hier die Zwischenergebnisse:
Bei "100 / Feld2" wird ggf. ein Zwischenergebnis bereits ohne NK berechnet.
Versuch es mal mit "100.000000 / Feld2".
Wenn das nicht klappt, musst du ggf. zusätzlich das Feld2 casten, da es zu viele NK's enthält: dec(feld2, 11, 2).
Auch die Multiplikation stellt ggf. ein Problem dar, da hier ein Zwischenfeld mit 12 NK's benötigt würde. Also sind auch hier mittels Cast vorher die NK's zu kürzen.
Zwischen embedded SQL und Dialog-SQL besteht leider immer ein Unterschied, da die embedded Statements ja prepared werden.
-
Wie Fuerchau sagt, liegt es daran, dass die numerischen Felder zu groß werden.
Da Du bereits auf Release V5R3M0 bist, kannst Du hast Du die Möglichkeit das Maximum der Anzahl Ziffern und Anzahl Nachkomma-Stellen von 31 auf 63 zu setzen.
Dies kann entweder im Compile-Befehl CRTSQLRPGI über die OPTION DECRESULT oder durch Einfügen eines entsprechenden SET OPTION-Statements mit der entsprechenden Auswahl.
Damit sollte es keine Probleme mehr geben.
Zusätzlich könntest Du noch das Ergebnis der Rundung entsprechend casten. (Hier z.B. auf 7,4)
PHP-Code:
C/EXEC SQL
C+ UPDATE LIB/FILE SET
C+ FELD3 = Cast(round((100/FELD2), 4) as Dec(7, 4)) * FELD1 * -1
C+ WHERE FELD 2 > 0 AND FELD1 > 0
C/END-EXEC
Birgitta
-
Herzlichen Dank euch beiden. Klappt hervorragend....
Freundliche Grüsse
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 11:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 15:53
-
By malzusrex in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 19-09-06, 12:04
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 15:11
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 10: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