-
Hilfe bei embedded SQL
Hallo,
ich mache gerade meine ersten Schritte mit embedded SQL.
Bis jetzt läuft es ganz gut, nur leider kann ich mir 2 Fragen nicht beantworten. Unzwar
Alpha Felder müssen ja mit Anführungszeichen in der Where Bestimmung angeben werden, also z.B. Feld 1 = 'HALLO'. In ILE RPG kann man sich dazu ein Konstante Basteln. Meine Programme sind jedoch momentan noch in RPG III. Deshalb meine Frage wie definieren ich Konstanten in RPG III oder wie händelt man das mit den Anfürungszeichen??
Die andere Frage ist das man Felder ja maximal mit 255 Zeichen difinieren kann. Leider sind meine SQL Statments größer wie händel ich dies?
Kann man beim PREPARE Befehl einfach, 2 Felder angeben und diese werden dann automatisch Verknüpft?
Danke für eure Antworten
Gruß
Marcel
-
Wenn du gleich mit dynamischem SQL loslegst hast du auch entsprechende Schwierigkeiten.
Fang doch erst mal mit statischen SQL's an, also nicht zusammengebauten.
Dann gibt's auch weniger Anfangsprobleme mit den Variablen.
Ein SQL kann bis 32k lang sein und wird weitestgehend vom SEU unterstützt.
also:
c/exec sql
c+ declare cursor mycursor for
c+ select f1, f2, f3 ...
c+ from myfile
c+ where k1= : R1 and K2= : K2
c/end-exec
Der große Vorteil:
Um Hochkommata brauchst du dich fast gar nicht zu kümmern.
Du definierst einfach deine RPG-Variablen und kannst diese als Quelle und Ziel im SQL mit einem ":" angeben.
c/exec sql
c+ open mycursor
c/end-exec
c/exec sql
c+ fetch mycursor into : v1, : V2, ...
c/end-exec
c/exec sql
c+ close mycursor
c/end-exec
Bei dynamischem SQL musst du bei Zeichenfeldern darauf achten, dass enthaltene Hochkommata ja verdoppelt werden müssen, sonst gibts Syntaxfehler !
Dynamisches SQL ist auch mit RPGLE besser durchzuführen (Variablen bis 32K).
-
Hallo,
Danke für die schnelle Antwort, leider muss ich direkt mit dynamischen SQL anfangen weil es mein Abschluss Projekt ist.
Ist es also bei RPG III nicht möglich größere Statments als 255 Zeichen zu generieren?
Und wie händelt man es nun mit den Anführungszeichen??
Vielen Dank für eure Antworten
Gruß
Marcel
-
Indirekt kann man Variablen bis 9999 Zeichen definieren.
E MDS 9999 1
IMYDS DS 9999
I 1 9999 MDS
Die DS MYDS ist dann als Variable mit 9999 Zeichen definiert. Das Array kann entfallen, der Compiler gibt dann nur eine 00-Warnung, dass die DS keine Felder enthält.
Das Hochkommaproblem musst du am besten in einer Sub-Routine lösen.
Zeichenketten müssen mit Hochkomma anfangen und enden:
cat '''':1 MYDS
cat chrfld:0 myds
cat '''':0 myds
Enthält chrfld ein Hochkomma (über '''' scan chrfld prüfbar) muss dieses verdoppelt werden.
Numerische Felder sind ohne Hochkomma mit Dezimalpunkt oder Komma aufzubereiten.
-
Guten Morgen,
hab es gerade mit den Anführungszeichen Versucht, funktioniert ohne Probleme. Vielen Dank.
Das mit dem 9999 stelligen Feld klappt leider nicht, in der DS wird das Feld auch richtig definiert und ich kann mein SQL Statment zusammenfügen.
Aber leider mag der PREPARE Befehl diese Art von Variable nicht. Gibt es zufällig noch eine andere Lösung.
Schonmal Vielen Dank für die Antworten, ihr helft mir sehr weiter
Gruß
Marcel
-
Hallo,
wenn Du unbedingt RPGIII mit dynamischem SQL, dann hast Du keine Chance! 255-Zeichen für einen SQL-Befehl sind das Limit!
Wir haben uns vor Jahren an diesen Restriktionen die Finger gebrochen und mussten dann mit ein paar Tricks statisches SQL verwenden. Die meisten Anforderungen können mit statischem SQL realisiert werden. Ausserdem ist die Performance mit statischem SQL besser, da die Syntax-Prüfung bereits zum Compile-Zeitpunkt und nicht erst zur Laufzeit erfolgt. Ausserdem werden die Zugriffs-Pläne beim statischen SQL im Programm-Objekt gespeichert und können bei folgenden Aufrufen zur Optimierung herangezogen werden.
Was spricht dagegen RPGIV mit embedded SQL zu verwenden?
Eigentlich ist RPGIII seit 10 Jahren tot (bzw. wird seit 10 Jahren nicht mehr weiterentwickelt) und damit m.E. auch für eine Projekt-Arbeit nicht das Gelbe vom Ei!
Bei RPGIV können die SQL-Befehle bis zu 35767 Byte lang sein.
Birgitta
-
Hallo,
da muss ich mich wohl geschlagen geben.
Habe mein jetztiges Programm mit CVTRPGSRC konvertiert.
Ich wollte RPG III verwenden, da momentan noch alle Programme bei uns in RPG III entwickelt werden.
Bei der Abschlussprüfung macht das keinen Unterschied, bin ja schon froh wenn die Prüfer die AS/400 und RPG kennen. Es lebe die IHK.
Was mich aber auch an ILE stört ist das man den ISDB nicht mehr benutzen kann und mit dem STRDBG werde ich nicht so richtig warm. Aber da muss ich jetzt wohl durch.
Danke für eure Hilfe
Gruß
Marcel
Similar Threads
-
By Squall in forum NEWSboard Programmierung
Antworten: 23
Letzter Beitrag: 18-10-06, 12:01
-
By muadeep in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 03-08-06, 13:25
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 18-06-06, 12:14
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By e_sichert in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 03-05-06, 10:47
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