AS/400-SQL-Schleife

Aus Knowledgebase
Wechseln zu: Navigation, Suche

Die Selektion von Datensätzen anhand eines (exakten) Vergleichswertes ist in RPG nicht auf DB-Ebene möglich. Lediglich das Anspringen des ersten Datensatzes in einer Tabelle ist machbar (SETLL). Zum Glück gibt es SQL, auch wenn dies leider nicht komplett integriert ist, sondern sehr angeflanscht aussieht! Beispiel einer SQLRPGLE-Schleife mit Vor- und Nachbereitung…

Vorarbeiten

Rpgvarname ist hierbei eine Variable innerhalb RPG.

C/EXEC SQL
C+ DECLARE SLT CURSOR FOR SELECT BLAH FROM LIB/BLUBBTBL
C+ WHERE FOO = :RPGVARNAME FOR READ ONLY
C/END-EXEC

C/EXEC SQL
C+ OPEN SLT
C/END-EXEC

C/EXEC SQL
C+ WHENEVER NOT FOUND GOTO ENDOFLOOP
C/END-EXEC

Schleife

  • Die Schleife wird implizit durch das oben gezeigte WHENEVER-Statement beendet.
  • RCDEXP ist eine vorher zu deklarierende Datenstruktur, welche die gleiche Feldart und -Folge der DB-Datei haben muss.
DO
C/EXEC SQL
C+ FETCH NEXT FROM SLT INTO :RCDEXP
C/END-EXEC
ENDDO
ENDOFLOOP TAG

Nachbereitung

C/EXEC SQL
C+ CLOSE SLT
C/END-EXEC