[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    May 2005
    Beiträge
    103

    Question SQL0302 - Umsetzungsfehler

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Prüfe die Definition der Zieldatei deines Insert mit den Select-Feldern.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    May 2005
    Beiträge
    103
    Vielen Dank für den Tipp.

    Genau das war's!!
    In diese Richtung hab' ich schon garnicht mehr gesucht.
    Ein Feld war als 10P2 anstatt als 13P4 definiert.

    -- Tobias

Similar Threads

  1. Fehler: SQL0302 Umsetzungsfehler / ado
    By Asti in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 29-08-06, 13:24

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •