AS/400-SQL-Schleife

Aus Knowledgebase
Version vom 24. Oktober 2017, 11:43 Uhr von PoC (Diskussion | Beiträge) (Neu)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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