-
Beispiele habe ich angehängt mit Bild aus der source hat es nicht geklapt. gruss
siehe Beispiel oben Danke und gruss an alle
-
Ok
wie kann ich es im RPG anbinden oder als parameter übergeben??
-
also
1) ich erstelle mein String(rechenoperation im Alpha format 200 Stellen alpha)
2) schreibe in eine Datei
3) Dann wird SQL ausgeführt
wo bekomme ich ergebnis, wie kann ich es einfach anbinden??
-
d MyStmt s 512
d MyErg s 30p 9
c/exec sql set options commit=*none
c/end-exec
c/exec sql
c+ declare cursor mycursor for statement mystmt
c/end-exec
c eval mystmt = 'select ' + Formel + ' from myfile'
c/exec sql
c+ prepare mystmt for :mystmt
c/end-exec
c if sqlcode <> *zero
c* Fehler in Formel
c endif
c/exec sql
c+ open mycursor
c/end-exec
c/exec sql
c+ fetch mycursor into :myerg
c/end-exec
c/exec sql
c+ close mycursor
c/end-exec
Die Syntax der SQL-Befehle habe ich jetzt leider nicht genau im Kopf.
Die Pseudo-Datei mit 1 Satz benötigst du nur, damit überhaupt 1 Satz und somit dein Ergebnis berechnet wird.
-
0417.65 C eval formel = '2100 * 121 * 10 / 1000000' *
0417.68 c/exec sql set option commit=*none
0417.69 c/end-exec
0417.70 c/exec sql
0417.71 c+ declare mycursor cursor for mystmt
0417.72 c/end-exec
0417.73 c eval mystmt = 'select ' + %trim(Formel)
0417.74 c + ' from myfile'
0417.75 C*
0417.76 c/exec sql
0417.77 c+ prepare mystmt from :mystmt
0417.78 c/end-exec
0417.79 c* if sqlcode <> *zero
0417.80 c* Fehler in Formel
0417.81 c* endif
0417.82 c/exec sql
0417.83 c+ open mycursor
0417.84 c/end-exec
0417.85 c/exec sql
0417.86 c+ fetch mycursor into :myerg 0417.87 c/end-exec *
0417.88 c/exec sql *
0417.89 c+ close mycursor *
0417.90 c/end-exec *
0417.91 C z-add myerg win309 30 9 *
Wenn ich es so wie oben ausführe bekomme ich als ergebnis immer 0
bitte um hilfe
-
Du musst den SQLCOD auswerten !
Probiere den Select erst mal per STRSQL aus.
Hast du die Datei "myfile" mit 1 Satz auch angelegt ?
Das kannst du auch per CRTPF und UPDDTA, ansonsten per SQL mit CREATE TABLE und INSERT.
-
 Zitat von Fuerchau
Du musst den SQLCOD auswerten !
Probiere den Select erst mal per STRSQL aus.
Hast du die Datei "myfile" mit 1 Satz auch angelegt ?
Das kannst du auch per CRTPF und UPDDTA, ansonsten per SQL mit CREATE TABLE und INSERT.
ich hatte kein satz im myfile. Jetzt geht es. Aber ergebnis immer ohne nachkomma stellen ergebnisfeld ist mit 30,9 definiert??
-
SQL optimiert da manchmal unglücklich.
In obigem Fall wird reine Ganzzahlenarithmetik verwendet.
Probiere mal verschiedene Varianten per STRSQL:
2100.0 * 121.0 * 10.0 / 1000000.0
ggf. ist auch ein Casting erforderlich, e.g.:
dec(2100, 11, 2) ...
-
 Zitat von Fuerchau
SQL optimiert da manchmal unglücklich.
In obigem Fall wird reine Ganzzahlenarithmetik verwendet.
Probiere mal verschiedene Varianten per STRSQL:
2100.0 * 121.0 * 10.0 / 1000000.0
ggf. ist auch ein Casting erforderlich, e.g.:
dec(2100, 11, 2) ...
Es hat geklappt ich habe nur eine division durch 1000000,0 ausgeführt und schon wird mit nachkommastellen gerechnet.
Ich habe die ganze SQL anweisung immer noch nicht richtig verstanden(FETCH und PREPARE???) Ich habe mich noch mit SQL zu wenig Beschäftigt. Wichtig ist erstmal das es funktioniert. VIELEN DANK Du BIST SUUUUPER
-
Du arbeitest hier mit "dynamischem SQL".
Mit "Declare xxx Cursor for yyy" erstellst du einen SQL-Cursor xxx für ein Statement yyy, also für eine Anweisung, mit dem Namen yyy, an Stelle eines Cursor mit einem "Select".
Statements müssen an SQL übergeben werden. SQL muss natürlich prüfen, ob die Anweisung korrekt ist und was für einen Typ die Anweisung hat.
Dafür steht der "Prepare" => Vorbereiten.
Cursor werden dann ganz normal mit "Open", "Fetch" (entspricht dem read) und "Close" verarbeitet.
Der Trick an der Sache ist, dass man SQL hier quasi missbraucht.
Da ausser REXX un ggf. Basic keine dynamischen Rechnenoperationen unterstützen, mache ich mir hier die SQL-Funktionen zu Nutze.
Das Gegenstück in RPG wäre:
c/exec sql
c+ set : myvar = Formel
c/end-exec
Die Set-Anweisung geht aber leider nicht dynamisch.
Alle anderen Anweisungen ausser Select lassen sich mit "execute immediate :mystmt" sofort ausführen.
Nach dem Prepare ist der SQLCOD auszuwerten um Fehler in der Formel festzustellen.
In SQLERD steht dann sogar die Position des Fehlers (in 4-byte-Binär) so dass man auch dem Benutzer dann Fehler anzeigen kann.
-
Habe ein Modul für soetwas
Ich habe soetwas mal programmiert. Mit Klammerregeln, Punkt-/Strichrechnung, SIN, COS etc. etc.
Beispiel: (1+4*(17+4))*7+SIN(90)
Ebenfalls kann eine logische Abfrage inkl. Zeichenkettenoperationen etc. berechnet werden.
SST("TEST":1:2) = "TE" AND 1=7 OR (2*2=4 AND 7*7=49)
Das Ganze wird in einem SRVPGM zur Verfügung gestellt und kann sehr einfach aufgerufen werden. Aus jedem ILE/RPG und pfeilschnell.
Bei Interesse bitte email an fb@bruegge.biz
-
 Zitat von Fuerchau
SQL optimiert da manchmal unglücklich.
In obigem Fall wird reine Ganzzahlenarithmetik verwendet.
Probiere mal verschiedene Varianten per STRSQL:
2100.0 * 121.0 * 10.0 / 1000000.0
ggf. ist auch ein Casting erforderlich, e.g.:
dec(2100, 11, 2) ...
...ist das echt die einzige Möglichkeit, kann man das nicht per set option erzwingen?
Mit freundlichen Grüß
Kai Schummer
Similar Threads
-
By e_sichert in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 07-11-06, 15:25
-
By edig in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 07-07-06, 10:51
-
By codierknecht in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 03-07-06, 15:25
-
By cheffe1008 in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 16-05-06, 07:45
-
By TomWaf in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 12-05-06, 09:07
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