es gilt immer noch:
- SQLCODE abfragen
- Joblog mit allen Details ansehen
- letzteres auch mit STRDBG, was SQL ausführlicher protokollieren lässt

interaktives SQL zeigt für Nullwerte automatisch Ersatzwerte an, beim insert geht das schief, wenn die Zieltabelle keine Nullwerte zulässt.
entweder Zieltabelle per SQL erstellen lassen:
create table as (select....) with no data usw.
oder im select die Nullwerte ersetzen
select a.xxx, coalesce(b.mynum, 0), coalesce(b.myalf, ' ')...
from mytable a left outer join anotherTable b on ...

D*B


Zitat Zitat von Tobse77 Beitrag anzeigen
Hallo Birgitta,

vielen Dank für die Antworten :-)

Habe den Fehler nun gefunden: Es lag daran, dass ich ein alphanumerisches Feld folgendermaßen in der Where-Bedingung abgefragt habe:

...
And Case When :igebart <> 0 Then :igebart Else vsgeba end = vsgeba

anstatt:
...
And Case When :igebart <> ' ' Then :igebart Else vsgeba end = vsgeba

Beim ersten Aufruf hat es immer funktioniert. Ab dem 2. jedoch nicht mehr. Wahrscheinlich wurde durch das erste exfmt das Feld mit *blank initialisiert und war somit unterschiedlich zu 0, wodurch die Where-Anweisung verhunzt war.
Nach dieser "klitzekleinen" Änderung funktioniert es.
Was ich allerdings immernoch nicht so ganz verstehe ist, warum es auch nach einem Beenden und Neuaufruf des Programms nicht wieder funktioniert hat ?!?

Nun habe ich allerdings noch einen weiteren Fehler gefunden :-(

Ich verknüpfe in meiner Select-Abfrage insgesamt 17 Files; eine davon 2 mal (Kunde und Verband).
Die Joins sind allesamt Left Outer Joins.
Ich habe in unserer Statistik (Aliasname: Statistik) TNr mit Suffix, die nicht im Teilestamm (Dateiname: MITEM) hinterlegt sind.
Über strsql funktioniert dies auch; in embedded SQL allerdings nicht.
Dort werden die TNr, die sich nicht im Teilestamm befinden auch nicht in meine Ausgabedatei geschrieben.

Woran kann dies liegen ??

Nachfolgend die SQL-Abfrage:

Exec SQL
Insert into VOGIO/EXVT0547
Select vsman, vsvbnr, a.ana1, a.ana2, a.acoi, a.apla, a.aort, a.astr,
vskdnr, b.ana1, b.ana2, b.acoi, b.apla, b.aort, b.astr,
vskdgr, c.tabbez, kdslbr, d.tabbez, vsvtr, e.tabbez,

vstnr, imdsc, imsts, vspgrg, f.tabbez, vsmagr, g.tabbez,
mi1v22, h.tabbez, vsmark, i.tabbez, vsmrze, j.tabbez,
vsprgr, k.tabbez, vsprug, l.tabbez, vsgebi, m.tabbez,
vsgeba, n.tabbez, mi1v19, o.tabbez,

vvimg3, vvimg2, vvimg1, vvimg0,
vviwg3, vviwg2, vviwg1, vviwg0

From VOGIO/Statistik Left Outer Join DCWD/AADRNU a
on vsvbnr = a.anum

Left Outer Join DCWD/AADRNU b
on vskdnr = b.anum

Left Outer Join VOGIO/KUNDST00
on vskdnr = kdnr

Left Outer Join VOGIO/V#TAK100 c
on vskdgr = c.tabinn

Left Outer Join VOGIO/V#TABR00 d
on kdslbr = d.tabinn

Left Outer Join VOGIO/V#TAVT00 e
on vsvtr = e.tabinn

Left Outer Join SIM400MFG/FKITMSTR
on vstnr = impn

Left Outer Join VOGIO/V#TAPU00 l
on vsprug = l.tabind

Left Outer Join VOGIO/V#TAGB00 m
on vsgebi = m.tabind

Left Outer Join VOGIO/V#TATH00 n
on vsgeba = n.tabind

Left Outer Join VOGIO/V#TALI00 o
on mi1v19 = o.tabinz

Where
Case When :ikdgr <> 0 Then :ikdgr Else vskdgr end = vskdgr
And Case When :ikdbr <> 0 Then :ikdbr Else kdslbr end = kdslbr
And Case When :ikdland <> ' ' Then :ikdland Else vsbla end = vsbla
And Case When :ivtr <> 0 Then :ivtr Else vsvtr end = vsvtr
And Case When :iverb <> 0 Then :iverb Else vsvbnr end = vsvbnr
And Case When :ikdnr <> 0 Then :ikdnr Else vskdnr end = vskdnr

And Case When :imagr <> ' ' Then :imagr Else vsmagr end
= vsmagr
And Case When :imhptgr <> ' ' Then :imhptgr Else mi1v22 end
= mi1v22
And Case When :imarkind <> ' ' Then :imarkind Else vsmark end
= vsmark
And Case When :iwg <> ' ' Then :iwg Else vsmrze end = vsmrze
And Case When :iprodgr <> ' ' Then :iprodgr Else vsprgr end
= vsprgr
And Case When :iprodugr <> ' ' Then :iprodugr Else vsprug end
= vsprug
And Case When :igebgr <> ' ' Then :igebgr Else vsgebi end = vsgebi
And Case When :igebart <> ' ' Then :igebart Else vsgeba end
= vsgeba
And Case When :iuland <> ' ' Then :iuland Else mi1v19 end = mi1v19
And Case When :ipreisgr <> ' ' Then :ipreisgr Else vspgrg end
= vspgrg
And Case When :itnr <> ' ' Then :itnr Else vstnr end = vstnr
And Case When :istatus <> ' ' Then :istatus Else imsts end
= imsts;

Mit folgendem Test über strsql bekomme ich das gewünschte Ergebnis:

select vskdnr, vstnr, mi1mnr, mi1mlb, mi1v22, a.tabbez, mi1v19,
b.tabbez
from vogio/v#vsta00
left outer join dcwd/mitem on vstnr = mi1mnr
left outer join vogio/v#tamh00 a on mi1v22 = a.tabind
left outer join vogio/v#tali00 b on mi1v19 = b.tabinz
where vskdnr = 3215 <--- bei dieser KdNr. gibt es etliche Suffix-TNr, die nun angezeigt werden