Die Quellenart ist SQLRPGLE (oder bei RPGIII SQLRPG)
Ein SQL-Statement beginnt mit C/EXEC SQL
und endet mit C/END-EXEC.
Die dazwischenliegenden Zeilen beginnen mit C+
Embedded SQL kann im Free-Format-RPG nicht verwendet werden, d.h. die Free-Format-Codierung muss zunächst mit /END-FREE beendet werden.
Verwendete Variablen werden mit führendem Doppelpunkt (:MyFld) angegeben.
Für eine Einzel-Satz-Verarbeitung in RPG benötigst Du folgendes:
1. Declare Cursor für das SQL-Statement
(entspricht in etwa den F-Bestimmungen)
Der Cursorname ist frei wählbar und muss innerhalb der Quelle eindeutig sein.
2. Open Cursor
(entspricht in etwa Öffnen der Datei und Positionieren)
3. Fetch
(entspricht dem Read)
Die Ausgabe-Felder können entweder einzeln aufgelistet werden, oder als Datenstruktur angegeben werden.
4. Close
(Datei schliessen)
Um auf Datei-Ende bzw. Satz nicht gefunden abzufagen benutzt Du entweder:
1. SQLCOD = 100 oder
2. SQLSTT = '02000'
SQLCOD < 0 heisst Fehler. Die zugehörige Message-Id kannst Du aus der Message-File QSQLMSG entnehmen.
Die Message-Id ist 'SQL' + absolut-Wert des SQLCODs.
Variable Message-Texte findest Du in SQLERM.
Nun ein Beispiel:
PHP-Code:
C/EXEC SQL
C+ Declare SQLC1 Cursor For
C+ Select a.Feld1, a.Feld2, b.Feld1, b.Feld2
C+ From MyFile1 a join MyFile2 b
C+ on a.KeyFld1 = b.KeyFld1
C+ and a.KeyFld2 = b.KeyFld2
C+ where a.Feld1 = :MyVar1
C***** weitere Selektions-Kriterien
C+ order by a.Feld1, b.Feld2
C+ For Read Only
C/END-EXEC
C/EXEC SQL
C+ open SQLC1
C/END-EXEC
C Do *HIVAL
C/EXEC SQL
C+ Fetch SQLC1 into :Feld1, :Feld2, :Feld3, :Feld4
C/END-EXEC
* Last Record
C If SQLCOD = 100
C Leave
C Endif
* Fehler
C IF SQLCOD < 0
C****** Fehlerhandling
C iter
C Endif
C* Verarbeitung
C enddo
C/EXEC SQL
C+ close SQLC1
C/END-EXEC
Weitere Informationen findest Du unter:
SQL Programming with Host Languages
Birgitta
Bookmarks