Tobse77
03-06-09, 08:51
Hallo zusammen,
meine neuesten SQL-Versuche bringen mich bald zur Verzweiflung.
Das Programm endet mit einem dem SQL-Fehlercode -302 und weist mich auf einen Umsetzungsfehler einer Host-Variablen oder eines Parameters oder eines Eintrags 87 in einem Deskriptorbereich hin. Die Art des aufgetretenen Fehlers ist 1 (Überlauf).
Das besagte Programm (Typ: SQLRPGLE) empfängt via Prototyping folgende Parameter aus einem Dialog-Programm:
* Prototyp für Prozedur VT0561P1 - Übertragen Auswahlkriterien für Submit
D VT0562 PRExtPgm('VT0562')
D Mandant 3P 0
D SprachSl 3P 0
D iaufnr 7A
D iltermv 10A
D iltermb 10A
D ildatv 10A
D ildatb 10A
D iaufart 2A
D ikopfsts 1A
D ipossts 1A
D iverb 7P 0
D ikdnr 7P 0
D ivtrvon 4P 0
D ivtrbis 4P 0
D ipreisgr 15A
D itnr 15A
D itnrsts 1A
D idwkdb 3P 0
D idwsb 3P 0
Zuerst monierte das Programm den Parameter :SprachSl. Diesen habe ich dann zu Testzwecken durch die Zahl 100 ersetzt.
Daraufhin störte sich das Programm am Parameter :Mandant. Diesen habe ich dann durch die Zahl 1 ersetzt.
Nun meckert das Pgm aufgrund des Parameters :IAufNr. Dieses ist aber für meine Testabfrage korrekt mit *blanks gefüllt.
Mit dem Debugger habe ich bereits alle im Prototyp angegebenen Variablen überprüft. Sie beinhalten die richtigen Werte.
Weiß jemand Rat?
Anbei noch das ausgeführte Select-Statement:
// Abfrage ausführen
ExecSQL
Insertinto VOGIO/EXVT0561
Select
// Verbandsdaten
dec(k.cmtax4, 3, 0), dec(k.chstcn, 7, 0),
a.ana1, a.ana2, a.acoi, a.apla, a.aort, a.astr,
// Kundendaten
dec(k.chno, 7, 0), b.ana1, b.ana2, b.acoi, b.apla,
b.aort, b.astr,
// Kundengruppe
dec(substr(k.chcrty, 2, 2), 2, 0), c.tabbez,
// Kundenbranche, Sortiment und Vertreter
kundst.kdslbr, d.tabbez, kundst.kdslpt,
dec(substr(k.chbpho, 5, 4), 4, 0), e.tabbez,
// Lieferanschriftsdaten
k.chdliv, f.kvana1, f.kvana2, f.kvalan, f.kvaplz, f.kvaort,
f.kvastr,
// kdfu1 = DW-KdBetr.
kundst.kdfu1,
// cdc10 = DW-Sachb.
coalesce(replace(cdc10, ' ', 0), dec(cdc10, 3, 0)),
// LS-Nr, RechNr, Bestelldatum
// lspo.dpcknr, lspo.drnr,
coalesce(dec(k.chodyr + 2000, 4, 0), 0), k.chodmo, k.chodda,
// Liefertermin usactmo, p.sactda,
// Letztes Versanddatum
coalesce(dec(p.cdlsyr + 2000, 4, 0), 0), p.cdlsmo, p.cdlsda,
// Lieferbedingung aus Auf.Kopf
dec(k.cmspcn, 3, 0), g.tabb50,
// Zahlungsbedingung aus Auf.Kopf und Texte aus ZBEDTX00
dec(k.cmtrms, 3, 0), zbtxt1, zbtxt2, zbtxt3, zbtxt4,
// Währung, Steuerverrechnung aus Auf.Kopf
k.chcurr, k.chcvat,
// AufNr, AufArt, Status aus Auf.Kopf
k.chono, substr(k.cmdscd, 2, 2), h.tabbez, k.chsts,
// AuPos, PosStatus, TNr, Teilestati, Bezeichnung, Eigen/Fremd,
// Sachb., VPE, KdOrigNr
p.cdline, p.cdsts, p.cdpn, coalesce(imacd, ' '),
coalesce(imsts, ' '), coalesce(imdsc, ' '),
coalesce(imcode, ' '), coalesce(imbuy, ' '),
coalesce(imomul, ' '), p.cdcspn,
// Preisgr und Bez, Gebindegr. und Gebindeart aus Auf.Pos
p.cdmpid, p.cddesc, p.cdmisc, p.cdmicd,
// Bestellmenge, Res.Pickmenge, Menge off. LS
p.cdqty, p.cdpqty, p.cdqwsp,
// Lt. Versanddatum, Lt. Vers.Menge, Lief.Menge TOTAL
dec(p.cdlsyr + 2000, 4, 0), p.cdlsmo, p.cdlsda, p.cdqtls,
p.cdsqty,
// Endpreis/Einheit, KzNetto, KzNN, Zu-Abschläge auf Rechnung und Pos.
p.cdicdl, p.cdainv, p.cdhtyp, p.cdqty1, p.cdqty2, p.cdqty3,
p.cdcmat, p.cdcopr, p.cdcvbr,
// Lagerbestand TOTAL, LBest nicht verf., Bestellbest., Auftragsmenge
coalesce(imqtoh, 0), coalesce(imshun, 0), coalesce(imqtod, 0),
coalesce(impkrv, 0)
// Dateien festlegen
From SIM400MFG/FHHDRMST k LeftOuterJoin SIM400MFG/FHDETMST p
on k.chono = p.chono
// Verknüpfung AADRNU mit Verbandsnr.
LeftOuterJoin DCWD/AADRNU a
ondec(substr(k.chstcn, 2, 7), 7, 0) = a.anum
// Verknüpfung AADRNU mit Kundennr.
LeftOuterJoin DCWD/AADRNU b
ondec(substr(k.chno, 2, 7), 7, 0) = b.anum
// Verknüpfung KUNDST00 mit Kundennr.
LeftOuterJoin VOGIO/KUNDST00 kundst
ondec(substr(k.chno, 2, 7), 7, 0) = kundst.kdnr
// Verknüpfung mit Bezeichnungsdatei Kundengruppe
LeftOuterJoin VOGIO/V#TAK100 c
ondec(substr(k.chcrty, 2, 2), 2, 0) = c.tabinn
// Verknüpfung mit Bezeichnungsdatei Kundenbranche
LeftOuterJoin VOGIO/V#TABR00 d
oncoalesce(kundst.kdslbr, 0) = coalesce(d.tabinn, 0)
// Verknüpfung mit Bezeichnungsdatei Vertreter
LeftOuterJoin VOGIO/V#TAVT00 e
ondec(substr(k.chbpho, 5, 4), 4, 0) = e.tabinn
// Verknüpfung mit Lieferanschriftsdatei
LeftOuterJoin VOGIO/KUNDVA00 f
ondec(substr(k.chno, 2, 7), 7, 0) = f.kvakd AND
k.chdliv = f.kvava
// Verknüpfung mit Bezeichnungsdatei Lieferbedingungen
LeftOuterJoin VOGIO/V#TALB00 g
oncoalesce(replace(k.cmspcn, ' ', 0), dec(k.cmspcn, 3, 0))
+ :SprachSl = g.tabin3
// Verknüpfung mit Zahlungsbedingungs-Textdatei
LeftOuterJoin VOGIO/ZBEDTX00
ondec(k.cmtrms, 3, 0) = zbsl ANDdec(k.chgord, 3, 0) = zbslsp
// Verknüpfung mit Bezeichnungsdatei Auftragsarten
LeftOuterJoin VOGIO/V#TAAA00 h
ondec(substr(k.cmdscd, 2, 2), 2, 0) = h.tabinn
// Verknüpfung mit Teilestamm
LeftOuterJoin SIM400MFG/FKITMSTR
oncoalesce(cdpn, ' ') = coalesce(impn, ' ')
// Bedingungen festlegen
Where
// Nur Aufträge des angemeldeten Mandanten auswählen
dec(k.cmtax4, 3, 0) = :Mandant
// Auftragsnummer
AndCaseWhen :iaufnr <> ' 'Then :iaufnr Else k.chono end = k.chono
// Liefertermin von
AndCaseWhen :iltermv <> ' 'Then :LTermVNum
elsedec(substr(digits(p.sactyr), 1, 2) !!
substr(digits(p.sactmo), 1, 2) !!
substr(digits(p.sactda), 1, 2), 6, 0)
end <= dec(substr(digits(p.sactyr), 1, 2) !!
substr(digits(p.sactmo), 1, 2) !!
substr(digits(p.sactda), 1, 2), 6, 0)
// Liefertermin bis
AndCaseWhen :iltermb <> ' 'Then :LTermBNum
elsedec(substr(digits(p.sactyr), 1, 2) !!
substr(digits(p.sactmo), 1, 2) !!
substr(digits(p.sactda), 1, 2), 6, 0)
end >= dec(substr(digits(p.sactyr), 1, 2) !!
substr(digits(p.sactmo), 1, 2) !!
substr(digits(p.sactda), 1, 2), 6, 0)
// Lieferdatum von
AndCaseWhen :ildatv <> ' 'Then :LDatVNum
elsedec(substr(digits(p.cdlsyr), 1, 2) !!
substr(digits(p.cdlsmo), 1, 2) !!
substr(digits(p.cdlsda), 1, 2), 6, 0)
end <= dec(substr(digits(p.cdlsyr), 1, 2) !!
substr(digits(p.cdlsmo), 1, 2) !!
substr(digits(p.cdlsda), 1, 2), 6, 0)
// Lieferdatum bis
AndCaseWhen :ildatb <> ' 'Then :LDatBNum
elsedec(substr(digits(p.cdlsyr), 1, 2) !!
substr(digits(p.cdlsmo), 1, 2) !!
substr(digits(p.cdlsda), 1, 2), 6, 0)
end >= dec(substr(digits(p.cdlsyr), 1, 2) !!
substr(digits(p.cdlsmo), 1, 2) !!
substr(digits(p.cdlsda), 1, 2), 6, 0)
// Auftragsart
AndCaseWhen :iaufart <> ' 'Then :iaufart Else
substr(k.cmdscd, 2, 3) end = substr(k.cmdscd, 2, 3)
// Status Auftragskopf
AndCaseWhen :ikopfsts <> ' 'Then :ikopfsts Else k.chsts end
= k.chsts
// Status Auftragsposition
AndCaseWhen :ipossts <> ' 'Then :ipossts Else p.cdsts end
= p.cdsts
// Verbandsnummer
AndCaseWhen :iverb <> 0 Then :iverb Elsedec(k.chstcn, 7, 0)
end = dec(k.chstcn, 7, 0)
// Kundennummer
AndCaseWhen :ikdnr <> 0 Then :ikdnr Elsedec(k.chno, 7, 0)
end = dec(k.chno, 7, 0)
// Vertreter von
AndCaseWhen :ivtrvon <> 0 Then :ivtrvon Else
dec(substr(k.chbpho, 5, 4), 4, 0) end
<= dec(substr(k.chbpho, 5, 4), 4, 0)
// Vertreter bis
AndCaseWhen :ivtrbis <> 0 Then :ivtrbis Else
dec(substr(k.chbpho, 5, 4), 4, 0) end
>= dec(substr(k.chbpho, 5, 4), 4, 0)
// Preisgruppe
AndCaseWhen :ipreisgr <> ' 'Then :ipreisgr Else
p.cdmpid end = p.cdmpid
// Teilenummer
AndCaseWhen :itnr <> ' 'Then :itnr Else p.cdpn end = p.cdpn
// Teilestatus
AndCaseWhen :itnrsts <> ' 'Then :itnrsts Else imsts end = imsts
// Durchwahl Kundenbetreuer
AndCaseWhen :idwkdb <> 0 Then :idwkdb Else kundst.kdfu1 end
= kundst.kdfu1
// Durchwahl Sachbearbeiter
AndCaseWhen :idwsb <> 0 Then :idwsb Else
coalesce(replace(cdc10, ' ', 0), dec(cdc10, 3, 0)) end
= coalesce(replace(cdc10, ' ', 0), dec(cdc10, 3, 0));
-- Tobias
meine neuesten SQL-Versuche bringen mich bald zur Verzweiflung.
Das Programm endet mit einem dem SQL-Fehlercode -302 und weist mich auf einen Umsetzungsfehler einer Host-Variablen oder eines Parameters oder eines Eintrags 87 in einem Deskriptorbereich hin. Die Art des aufgetretenen Fehlers ist 1 (Überlauf).
Das besagte Programm (Typ: SQLRPGLE) empfängt via Prototyping folgende Parameter aus einem Dialog-Programm:
* Prototyp für Prozedur VT0561P1 - Übertragen Auswahlkriterien für Submit
D VT0562 PRExtPgm('VT0562')
D Mandant 3P 0
D SprachSl 3P 0
D iaufnr 7A
D iltermv 10A
D iltermb 10A
D ildatv 10A
D ildatb 10A
D iaufart 2A
D ikopfsts 1A
D ipossts 1A
D iverb 7P 0
D ikdnr 7P 0
D ivtrvon 4P 0
D ivtrbis 4P 0
D ipreisgr 15A
D itnr 15A
D itnrsts 1A
D idwkdb 3P 0
D idwsb 3P 0
Zuerst monierte das Programm den Parameter :SprachSl. Diesen habe ich dann zu Testzwecken durch die Zahl 100 ersetzt.
Daraufhin störte sich das Programm am Parameter :Mandant. Diesen habe ich dann durch die Zahl 1 ersetzt.
Nun meckert das Pgm aufgrund des Parameters :IAufNr. Dieses ist aber für meine Testabfrage korrekt mit *blanks gefüllt.
Mit dem Debugger habe ich bereits alle im Prototyp angegebenen Variablen überprüft. Sie beinhalten die richtigen Werte.
Weiß jemand Rat?
Anbei noch das ausgeführte Select-Statement:
// Abfrage ausführen
ExecSQL
Insertinto VOGIO/EXVT0561
Select
// Verbandsdaten
dec(k.cmtax4, 3, 0), dec(k.chstcn, 7, 0),
a.ana1, a.ana2, a.acoi, a.apla, a.aort, a.astr,
// Kundendaten
dec(k.chno, 7, 0), b.ana1, b.ana2, b.acoi, b.apla,
b.aort, b.astr,
// Kundengruppe
dec(substr(k.chcrty, 2, 2), 2, 0), c.tabbez,
// Kundenbranche, Sortiment und Vertreter
kundst.kdslbr, d.tabbez, kundst.kdslpt,
dec(substr(k.chbpho, 5, 4), 4, 0), e.tabbez,
// Lieferanschriftsdaten
k.chdliv, f.kvana1, f.kvana2, f.kvalan, f.kvaplz, f.kvaort,
f.kvastr,
// kdfu1 = DW-KdBetr.
kundst.kdfu1,
// cdc10 = DW-Sachb.
coalesce(replace(cdc10, ' ', 0), dec(cdc10, 3, 0)),
// LS-Nr, RechNr, Bestelldatum
// lspo.dpcknr, lspo.drnr,
coalesce(dec(k.chodyr + 2000, 4, 0), 0), k.chodmo, k.chodda,
// Liefertermin usactmo, p.sactda,
// Letztes Versanddatum
coalesce(dec(p.cdlsyr + 2000, 4, 0), 0), p.cdlsmo, p.cdlsda,
// Lieferbedingung aus Auf.Kopf
dec(k.cmspcn, 3, 0), g.tabb50,
// Zahlungsbedingung aus Auf.Kopf und Texte aus ZBEDTX00
dec(k.cmtrms, 3, 0), zbtxt1, zbtxt2, zbtxt3, zbtxt4,
// Währung, Steuerverrechnung aus Auf.Kopf
k.chcurr, k.chcvat,
// AufNr, AufArt, Status aus Auf.Kopf
k.chono, substr(k.cmdscd, 2, 2), h.tabbez, k.chsts,
// AuPos, PosStatus, TNr, Teilestati, Bezeichnung, Eigen/Fremd,
// Sachb., VPE, KdOrigNr
p.cdline, p.cdsts, p.cdpn, coalesce(imacd, ' '),
coalesce(imsts, ' '), coalesce(imdsc, ' '),
coalesce(imcode, ' '), coalesce(imbuy, ' '),
coalesce(imomul, ' '), p.cdcspn,
// Preisgr und Bez, Gebindegr. und Gebindeart aus Auf.Pos
p.cdmpid, p.cddesc, p.cdmisc, p.cdmicd,
// Bestellmenge, Res.Pickmenge, Menge off. LS
p.cdqty, p.cdpqty, p.cdqwsp,
// Lt. Versanddatum, Lt. Vers.Menge, Lief.Menge TOTAL
dec(p.cdlsyr + 2000, 4, 0), p.cdlsmo, p.cdlsda, p.cdqtls,
p.cdsqty,
// Endpreis/Einheit, KzNetto, KzNN, Zu-Abschläge auf Rechnung und Pos.
p.cdicdl, p.cdainv, p.cdhtyp, p.cdqty1, p.cdqty2, p.cdqty3,
p.cdcmat, p.cdcopr, p.cdcvbr,
// Lagerbestand TOTAL, LBest nicht verf., Bestellbest., Auftragsmenge
coalesce(imqtoh, 0), coalesce(imshun, 0), coalesce(imqtod, 0),
coalesce(impkrv, 0)
// Dateien festlegen
From SIM400MFG/FHHDRMST k LeftOuterJoin SIM400MFG/FHDETMST p
on k.chono = p.chono
// Verknüpfung AADRNU mit Verbandsnr.
LeftOuterJoin DCWD/AADRNU a
ondec(substr(k.chstcn, 2, 7), 7, 0) = a.anum
// Verknüpfung AADRNU mit Kundennr.
LeftOuterJoin DCWD/AADRNU b
ondec(substr(k.chno, 2, 7), 7, 0) = b.anum
// Verknüpfung KUNDST00 mit Kundennr.
LeftOuterJoin VOGIO/KUNDST00 kundst
ondec(substr(k.chno, 2, 7), 7, 0) = kundst.kdnr
// Verknüpfung mit Bezeichnungsdatei Kundengruppe
LeftOuterJoin VOGIO/V#TAK100 c
ondec(substr(k.chcrty, 2, 2), 2, 0) = c.tabinn
// Verknüpfung mit Bezeichnungsdatei Kundenbranche
LeftOuterJoin VOGIO/V#TABR00 d
oncoalesce(kundst.kdslbr, 0) = coalesce(d.tabinn, 0)
// Verknüpfung mit Bezeichnungsdatei Vertreter
LeftOuterJoin VOGIO/V#TAVT00 e
ondec(substr(k.chbpho, 5, 4), 4, 0) = e.tabinn
// Verknüpfung mit Lieferanschriftsdatei
LeftOuterJoin VOGIO/KUNDVA00 f
ondec(substr(k.chno, 2, 7), 7, 0) = f.kvakd AND
k.chdliv = f.kvava
// Verknüpfung mit Bezeichnungsdatei Lieferbedingungen
LeftOuterJoin VOGIO/V#TALB00 g
oncoalesce(replace(k.cmspcn, ' ', 0), dec(k.cmspcn, 3, 0))
+ :SprachSl = g.tabin3
// Verknüpfung mit Zahlungsbedingungs-Textdatei
LeftOuterJoin VOGIO/ZBEDTX00
ondec(k.cmtrms, 3, 0) = zbsl ANDdec(k.chgord, 3, 0) = zbslsp
// Verknüpfung mit Bezeichnungsdatei Auftragsarten
LeftOuterJoin VOGIO/V#TAAA00 h
ondec(substr(k.cmdscd, 2, 2), 2, 0) = h.tabinn
// Verknüpfung mit Teilestamm
LeftOuterJoin SIM400MFG/FKITMSTR
oncoalesce(cdpn, ' ') = coalesce(impn, ' ')
// Bedingungen festlegen
Where
// Nur Aufträge des angemeldeten Mandanten auswählen
dec(k.cmtax4, 3, 0) = :Mandant
// Auftragsnummer
AndCaseWhen :iaufnr <> ' 'Then :iaufnr Else k.chono end = k.chono
// Liefertermin von
AndCaseWhen :iltermv <> ' 'Then :LTermVNum
elsedec(substr(digits(p.sactyr), 1, 2) !!
substr(digits(p.sactmo), 1, 2) !!
substr(digits(p.sactda), 1, 2), 6, 0)
end <= dec(substr(digits(p.sactyr), 1, 2) !!
substr(digits(p.sactmo), 1, 2) !!
substr(digits(p.sactda), 1, 2), 6, 0)
// Liefertermin bis
AndCaseWhen :iltermb <> ' 'Then :LTermBNum
elsedec(substr(digits(p.sactyr), 1, 2) !!
substr(digits(p.sactmo), 1, 2) !!
substr(digits(p.sactda), 1, 2), 6, 0)
end >= dec(substr(digits(p.sactyr), 1, 2) !!
substr(digits(p.sactmo), 1, 2) !!
substr(digits(p.sactda), 1, 2), 6, 0)
// Lieferdatum von
AndCaseWhen :ildatv <> ' 'Then :LDatVNum
elsedec(substr(digits(p.cdlsyr), 1, 2) !!
substr(digits(p.cdlsmo), 1, 2) !!
substr(digits(p.cdlsda), 1, 2), 6, 0)
end <= dec(substr(digits(p.cdlsyr), 1, 2) !!
substr(digits(p.cdlsmo), 1, 2) !!
substr(digits(p.cdlsda), 1, 2), 6, 0)
// Lieferdatum bis
AndCaseWhen :ildatb <> ' 'Then :LDatBNum
elsedec(substr(digits(p.cdlsyr), 1, 2) !!
substr(digits(p.cdlsmo), 1, 2) !!
substr(digits(p.cdlsda), 1, 2), 6, 0)
end >= dec(substr(digits(p.cdlsyr), 1, 2) !!
substr(digits(p.cdlsmo), 1, 2) !!
substr(digits(p.cdlsda), 1, 2), 6, 0)
// Auftragsart
AndCaseWhen :iaufart <> ' 'Then :iaufart Else
substr(k.cmdscd, 2, 3) end = substr(k.cmdscd, 2, 3)
// Status Auftragskopf
AndCaseWhen :ikopfsts <> ' 'Then :ikopfsts Else k.chsts end
= k.chsts
// Status Auftragsposition
AndCaseWhen :ipossts <> ' 'Then :ipossts Else p.cdsts end
= p.cdsts
// Verbandsnummer
AndCaseWhen :iverb <> 0 Then :iverb Elsedec(k.chstcn, 7, 0)
end = dec(k.chstcn, 7, 0)
// Kundennummer
AndCaseWhen :ikdnr <> 0 Then :ikdnr Elsedec(k.chno, 7, 0)
end = dec(k.chno, 7, 0)
// Vertreter von
AndCaseWhen :ivtrvon <> 0 Then :ivtrvon Else
dec(substr(k.chbpho, 5, 4), 4, 0) end
<= dec(substr(k.chbpho, 5, 4), 4, 0)
// Vertreter bis
AndCaseWhen :ivtrbis <> 0 Then :ivtrbis Else
dec(substr(k.chbpho, 5, 4), 4, 0) end
>= dec(substr(k.chbpho, 5, 4), 4, 0)
// Preisgruppe
AndCaseWhen :ipreisgr <> ' 'Then :ipreisgr Else
p.cdmpid end = p.cdmpid
// Teilenummer
AndCaseWhen :itnr <> ' 'Then :itnr Else p.cdpn end = p.cdpn
// Teilestatus
AndCaseWhen :itnrsts <> ' 'Then :itnrsts Else imsts end = imsts
// Durchwahl Kundenbetreuer
AndCaseWhen :idwkdb <> 0 Then :idwkdb Else kundst.kdfu1 end
= kundst.kdfu1
// Durchwahl Sachbearbeiter
AndCaseWhen :idwsb <> 0 Then :idwsb Else
coalesce(replace(cdc10, ' ', 0), dec(cdc10, 3, 0)) end
= coalesce(replace(cdc10, ' ', 0), dec(cdc10, 3, 0));
-- Tobias