-
SQL Statement in SQLRPGLE
Hallo,
ich habe eine Frage bezüglich embedded SQL. Ich möchte eine Datei auslesen und hinterher in eine Printerfile drucken.
Mein SQL Befehlt sieht wie folgt aus:
EXEC SQL
select * into :test
from scw_data/CXLAGPF
where cxfirm =DRFIRM
and cxekvk = 'S'
and cxsart = 'S'
and cxmeng <> 0
and cxstat = ' '
and cxrest <> 0;
In die Variable Test soll der Datensatz geschrieben werden. Nun zu meinem Problem.
1) Es wird nur das erste Feld in die Variable Test geschrieben, wie bekomme ich alle Felder in die Variable oder wie kann ich mehrere Variablen angeben, wo die Werte eingetragen werden?
2) Mit dieser Methode bekomme ich ja immer nur einen Datensatz in die Variable Test. Das SQL müsste aber mehrere ausgeben, wie kann ich mehrere Ergebniss-Datensätze in meine prtf schreiben?
Vielen Dank im Vorraus!!!
LG Vigi
-
Zitat von Vigi
1) Es wird nur das erste Feld in die Variable Test geschrieben, wie bekomme ich alle Felder in die Variable oder wie kann ich mehrere Variablen angeben, wo die Werte eingetragen werden?
2) Mit dieser Methode bekomme ich ja immer nur einen Datensatz in die Variable Test. Das SQL müsste aber mehrere ausgeben, wie kann ich mehrere Ergebniss-Datensätze in meine prtf schreiben?
Vielen Dank im Vorraus!!!
LG Vigi
@1: Definiere Test als Externe Datenstruktur für den Datensatz den Du einlesen willst.
@2: Du musst einen Cursor definieren und die einzelnen Datensätze über eine Lese-Schleife verarbeiten:
SQL Statements:
1. DECLARE
2. OPEN
3. FETCH
4. CLOSE
Nähere Informationen findet man in dem folgenden Redbook - Kapitel 7
Modernizing IBM eServer iSeries Application Data Access - A Roadmap Cornerstone
Birgitta
-
WOW, das war mal ne schnelle Antwort.
Vielen Dank Birgitta!
Dann sieht das ganze schon besser aus:
D Ok C 0
D MyData E Ds Extname(CXLAGPF)
Exec Sql Set Option Datfmt=*Iso, Commit=*None;
EXEC SQL Declare Mycursor Cursor For
select * from scw_data/CXLAGPF
where cxfirm =DRFIRM
and cxekvk = 'S'
and cxsart = 'S'
and cxmeng <> 0
and cxrest <> 0
For Fetch Only;
Exec Sql Open Mycursor;
Dow Sqlcode = Ok;
Exec Sql Fetch Mycursor Into :Mydata;
If Sqlcode = Ok;
Exsr SchreibInPRTF;
Endif;
Enddo;
Soweit so klar
Meine Daten stehen jetzt in Mydata. Da habe ich aber leider direkt eine "Folgefrage".
Wie spreche ich die einzelnen Feldinhalte aus Mydata an, um diese in die Felder der Printerfile zu übertragen?
Sagen wir mal in der Datei CXLAGPF gibt es die Felder KFirma, KKunde, KUmsatz und in der PRTF PKunde, PFirma, PUmsatz.
Mag sein, dass meine Fragen sehr, naja, unverständlich rüber kommen. Das Problem ist nur, dass ich grad mit SQL in RPG Programmen anfange und nur wenig(eigentlich keine) Zeit zum einarbeiten habe, da der Abgabetermin recht kurzfristig ist.
Darum Danke schonmal für alle hilfreichen Antworten!
LG Vigi
-
Hallo Birgitta, da ich nicht wirklich RPG kann sondern nur Cobol stellt sich mir die Frage ob es das so detailliert auch für Cobol gibt? Kennst Du da was?
GG
-
Das Problem ist wohl nicht SQL sondern RPG ?
Wie hast du denn nach einem Read/Chain Dateifelder in Druckfelder bewegt ?
Entschuldige bitte die provozierende Frage, aber als RPG-Programmierer müsstest du das ja schon mal wissen.
Ein Fetch ist ja eigentlich nichts anderes als ein READ/CHAIN auf eine Datei.
Die Inhalte stehen dann in den Feldern deiner extern definierten Struktur, so dass du die Daten ebne ganz normal wie sonst auch verarbeiten kannst.
-
Hallo Vigi, aller Anfang ist schwer.
Du kannst die Felder einer Datenstruktur qualifiziert ansprechen:
Code:
PKunde = MyData.KKunde;
PFirma = MyData.KFirma;
PUmsatz = MyData.KUmsatz;
-
Du wirst lachen, aber für Cobol gibts das ganz genauso.
Einziger Unterschied:
Für SQL muss man Felder explizit zugänglich machen:
exec sql begin declare section end-exec.
01 ...
77 ...
exec sql end declare section end-exec.
Dies kann in der Quelle beliebig oft wiederholt werden.
Zusätzlich muss man einmalig die SQLCA einbinden:
exec sql
include SQLCA
end-exec.
Alle anderen SQL-Befehle werden genauso eingebunden wie in RPG/LE.
exec sql
:
:
end-exec.
Für die Fehlerbehandlung ist es am einfachsten am Anfang der Procedure Division einmalig
exec sql
whenever sqlerror continue
end-exec.
einzubinden. Dann kann man die Variable SQLCODE direkt auswerten.
Der Member-Typ ist SQLCBL bzw. SQLCBLLE.
-
Zitat von Vigi
Das Problem ist nur, dass ich grad mit SQL in RPG Programmen anfange und nur wenig(eigentlich keine) Zeit zum einarbeiten habe, da der Abgabetermin recht kurzfristig ist.
... und getestet wird später.
-
Top, es läuft.
Es ging mir genau darum, die Felder qualifiziert anzusprechen.
1000 Dank ;-)
Super Team hier!
-
Zitat von Pikachu
... und getestet wird später.
... die Bananen Strategie im Software Engineering: die Ware reift beim Kunden
D*B
PS: für COBOL und RPG gibt es noch:
http://publib.boulder.ibm.com/infoce...zajp/rzajp.pdf
-
Zitat von Fuerchau
Du wirst lachen, aber für Cobol gibts das ganz genauso.
Einziger Unterschied:
Für SQL muss man Felder explizit zugänglich machen:
exec sql begin declare section end-exec.
01 ...
77 ...
exec sql end declare section end-exec.
Dies kann in der Quelle beliebig oft wiederholt werden.
Zusätzlich muss man einmalig die SQLCA einbinden:
exec sql
include SQLCA
end-exec.
Alle anderen SQL-Befehle werden genauso eingebunden wie in RPG/LE.
exec sql
:
:
end-exec.
Für die Fehlerbehandlung ist es am einfachsten am Anfang der Procedure Division einmalig
exec sql
whenever sqlerror continue
end-exec.
einzubinden. Dann kann man die Variable SQLCODE direkt auswerten.
Der Member-Typ ist SQLCBL bzw. SQLCBLLE.
Danke, dann weiß ich ja was ich die Feiertage über machen werde...
GG
-
... die Bananen Strategie im Software Engineering: die Ware reift beim Kunden
D*B
-> Das ist gut rofl
Eine Kleinigkeit hat sich noch ergeben.
Wenn man in der DSPF *blank, also nichts eingibt, dann soll alles angezeigt werden.
Beispiel:
Kundenname: *blank
Das SQL gibt jetzt natürlich keinen Treffer, da es keinen Kunden ohne Namen gibt. Wie kann ich aber sämtliche Kunden angezeigt bekommen, wenn der Anwender keinen Kundennamen eingibt.
Habe versucht, dass *blank durch ein "*" zu ersetzten, das funktioniert aber leider nicht. Hat da jmd ne Idee?
Similar Threads
-
By Sony in forum IBM i Hauptforum
Antworten: 27
Letzter Beitrag: 20-07-09, 21:48
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By juergenkemeter in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 15-11-04, 12:15
-
By Pia in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-04-02, 15:24
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