PDA

View Full Version : FETCH INTO DESCRIPTOR liefert immer die erste Dateizeile zurück



mino
27-10-09, 11:42
Hallo zusammen,

ich habe ein Problem mit einem variablen SQL.
Der erste FETCH funktioniert problemlos.
Die folgenden liefern aber als Ergebnis immer den Inhalt des ersten Ergebnisses zurück.
Im Log sehe ich dann folgende Meldung:

Nachrichten-ID . . . . : SQL0030 Bewertung . . . . . . : 00
Nachrichtenart . . . . : Information
Sendedatum . . . . . . : 27.10.09 Sendezeit . . . . . . : 12:17:17

Nachricht . . . : Anzahl der Host-Variablen geringer als die Ergebniswerte.
Ursache . . . . : Die Anzahl der in der Klausel INTO angegebenen
Host-Variablen ist geringer als die Anzahl der Ergebniswerte. Wird das
Programm verarbeitet, werden nur den angegebenen Variablen Werte zugeordnet.
Fehlerbeseitigung: Sollen alle Werte empfangen werden, richtige Anzahl an
Host-Variablen angeben. Das Programm erneut vorumwandeln.


Viele Grüße
Michael

---------

mino
29-10-09, 18:35
Ich habe ein wenig weiter mit der obigen Quelle herumexperimentiert.

Wenn ich FETCH NEXT... ersetze durch


fetch relative 1 from C1 into sql descriptor :v_descriptor


und direkt danach :confused:



c if v_i_fetch = 2
c/exec sql
c+ fetch relative 0 from C1 into sql descriptor :v_descriptor
c/end-exec
c endif
*---
c if v_i_fetch = 3
c/exec sql
c+ fetch relative 0 from C1 into sql descriptor :v_descriptor
c/end-exec
c/exec sql
c+ fetch relative 0 from C1 into sql descriptor :v_descriptor
c/end-exec
c endif
*---
c if v_i_fetch = 4
c/exec sql
c+ fetch relative 0 from C1 into sql descriptor :v_descriptor
c/end-exec
c/exec sql
c+ fetch relative 0 from C1 into sql descriptor :v_descriptor
c/end-exec
c/exec sql
c+ fetch relative 0 from C1 into sql descriptor :v_descriptor
c/end-exec
c endif

dann werden tatsächlich die nächsten Zeilen eingelesen.
Das heisst, man braucht pro FETCH RELATIVE 1 ... -Vorgang in der Schleife immer ein zusätzliches FETCH RELATIVE 0... mehr.

Das kann ja nicht der Weisheit letzter Schluss sein - ist also wohl ein Bug.

Eine Schleife in der Art


c If v_i_fetch >= 2
c eval v_i_fetch_0 = v_i_fetch - 1
c do v_i_fetch_0
c/exec sql
c+ fetch relative 0 from C1 into sql descriptor :v_descriptor
c/end-exec
c enddo
c EndIf
funktioniert nicht. :(

Kann diesen Effekt einer von Euch bei sich auf der i5 nachvollziehen (Betriebssystem ist V5R4M0)?

Viele Grüße
Michael