PDA

View Full Version : embedded SQL Fehler SQL0312 beim Umwandeln



Hubert
06-12-19, 07:31
Guten Tag,

meine Abfrage sieht so aus:

exec sql
Declare csBundinfo cursor For
select
ROBUND BUNDNR
max(ROWDAT) RMDAT
max(ANLDT) FMDAT,
'RM' HBESTART,
0 FOLGE
from roheing
left outer join matjour
on robund = fbundnr
where robund = :BSBUND
group by robund
having max(ANLDT) is null
or max(ROWDAT) > max(ANLDT)

Interaktiv läuft sie einwandfrei. Wenn ich das Ergebnis in eine Datenstruktur laden will:

exec sql
open csBundinfo;
exec sql fetch next from csBundinfo
into :Bundherk :ANZARRAY;

Bekomme ich beim Umwandeln die Fehlermeldung
"Position 30 Variable BUNDHERK nicht definiert oder nicht verwendbar."

Die DS Bundherk habe ich extern definiert mit der Ergebnisdatei, die über die interaktive QMQRY erzeugt wurde.

Wenn ich nur ein Feld selektiere und den FETCH in das Feld der DS ausführe, ist alles gut, nur mit der DS funktioniert es nicht.

Hat jemand eine Idee, wie ich den Fehler vermeiden kann?

Herzlichen Dank im Voraus

Hubert

Robi
06-12-19, 07:55
Probier mal beim Umwandeln den Parameter
RPG-Vorprozessoroptionen . . . . RPGPPOPT > *LVL2

Hubert
06-12-19, 08:16
Habe ich schon gemacht. Hat mich aber auch nicht weitergebracht. Aus der Umwandlungsliste:


BUNDHERK 11 STRUCTURE
108
BUNDNR 12 NUMERIC(11,0) IN BUNDHERK
BUNDNR **** COLUMN

Fuerchau
06-12-19, 08:40
"into :Bundherk :ANZARRAY;"
Ist das ein Schreibfehler, denn da fehlt ein Komma?
Falls nicht gilt folgende Regel:
Alle Select-Felder müssein in der Struktur BUNDHERK vorhanden sein, ANZARRAY muss "INT(5) DIM(n)" als NULLIND-Array deklariert sein.
Im Select führst du 5 Ergebnisfelder auf, deine Struktur sollte also 5 passende Felder in der Reihenfolge enthalten.
Ist dies nicht gewährleistet, muss der Fetch die Zielfelder incl. ggf. NULL-Anzeiger einzeln angeben.

Hubert
06-12-19, 10:23
Hallo Baldur,

nein, das ist kein Schreibfehler. Das ANZARRAY (war korrekt definiert) wird ohne Komma ans Ende der Anweisung gestellt. Die Felder sind in der Struktur vorhanden. Trotzdem klappt es mit der DS nicht (weiß der Geier warum). Aber Dein Tipp, die Felder einzeln anzugeben, war von Erfolg gekrönt.

Schönes Wochenende

Hubert

Fuerchau
06-12-19, 11:36
Die Frage war: Ist die Struktur identisch definiert zu deinem Select?
Wenn nicht, kann SQL das nicht auflösen.
Der Compiler versucht je Feld der DS eine SQLnnn-Variable zu definieren und im Fetch der Reihe nach zuzuordnen, also 1. Selectfeld = 1.Strukturfeld, ....
Und da scheint was nicht zu passen.

Auch verstehe ich deinen Code-Auszug überhaupt nicht.

harkne
09-12-19, 09:48
Sollte im Select nicht hinter allen Felder ein Komma kommen ? So wie das SQL ganz oben angegeben ist, kann ich mir das nicht vorstellen, dass das interaktiv läuft.

Fuerchau
09-12-19, 10:30
Das halte ich eher für einen Übertragungsfehler;-). Der Compiler hätte da schon gemeckert, selbst der SEU kann noch SQL.

Robi
09-12-19, 11:07
mach einfach mal ein

select deinfeld HUGO from Datei

-->
HUGO
1
2
3
...

oder anders gesagt ....
er hat sich das AS gespart!

Fuerchau
09-12-19, 12:45
Das war nicht das Problem:

select
ROBUND BUNDNR ,
max(ROWDAT) RMDAT ,
max(ANLDT) FMDAT,
'RM' HBESTART,
0 FOLGE