PDA

View Full Version : Konversion von NULL-Werten in SQL-leftJOIN bei deim schreiben



Sigma
17-04-03, 15:03
Hallo Läute brauche eure Hilfe!

zum Verknüpfen zweier Tabellen miteinander verwende ich left-join funktion (implementiertem SQL im Cobol). Dabei enstehen Felder die mit NULL-Werten gefült sind, beim Fetch´en gibt mir der Compiler endsprechend die Meldung, er könne "leeren" Felder nicht ab...

so jetzt frage ich mich ob man innerhalb des Cursors oder gleich in der Select-Anweisung sagen kann, dass wenn die Felder "leer" sind soll er die mit Nullen füllen...oder per Update oder sonst irgendwie Konversieren...

für ein Tip wäre ich euch sehr dankbar
bye

B.Hauser
17-04-03, 15:52
Hallo,

Zum einen gibt skalare SQL-Funktionen wie IFNULL und COALESCE mit denen man NULL-Werte ausschliessen kann.

Zum anderen Du kannst in deinen Where-Bedingungen auf NULL abfragen:

Select ...
Where Feld1 IS NULL and Feld2 IS NOT NULL

Birgitta

Sigma
22-04-03, 09:21
Hallo Birgitta

<<Zum einen gibt skalare SQL-Funktionen wie IFNULL und COALESCE mit denen man NULL-Werte ausschliessen kann.

Zum anderen Du kannst in deinen Where-Bedingungen auf NULL abfragen:

Select ...
Where Feld1 IS NULL and Feld2 IS NOT NULL>>

dass ist ja auch das Problem, dass die Felder der beiden Tabellen keine NULL-Werte enthalten, soder die enstehen erst ducht die RightJoin Anweisung, also kann ich keinen Feld direct abfragen sondern (ich benuze einen cursor) muss die Möglichkeit haben auf den Cursor zugreifen um die darin enthaltende Null-Säte zu lokalisieren...
so siehts aus:
DECLARE C1 SCROLL CURSOR FOR
SELECT A.MLFILE,
A.MLLIB,
A.MLSIZE
B.mlsize
FROM d9980p00 A
left join
d9980p10 B
on
A.MLFILE = B.MLFILE and
A.MLLIB = B.MLLIB


......

BenderD
22-04-03, 09:56
Hi

<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von Sigma:
Hallo Birgitta

&lt;&lt;Zum einen gibt skalare SQL-Funktionen wie IFNULL und COALESCE mit denen man NULL-Werte ausschliessen kann.

Zum anderen Du kannst in deinen Where-Bedingungen auf NULL abfragen:

Select ...
Where Feld1 IS NULL and Feld2 IS NOT NULL&gt;&gt;

dass ist ja auch das Problem, dass die Felder der beiden Tabellen keine NULL-Werte enthalten, soder die enstehen erst ducht die RightJoin Anweisung, also kann ich keinen Feld direct abfragen sondern (ich benuze einen cursor) muss die Möglichkeit haben auf den Cursor zugreifen um die darin enthaltende Null-Säte zu lokalisieren...
so siehts aus:
DECLARE C1 SCROLL CURSOR FOR
SELECT A.MLFILE,
A.MLLIB,
A.MLSIZE
COALESCE(B.mlsize, 0)
FROM d9980p00 A
left join
d9980p10 B
on
A.MLFILE = B.MLFILE and
A.MLLIB = B.MLLIB


......[/quote]
Dieter

Sigma
22-04-03, 10:59
danke an alle...
IFNULL(B.MLSIZE, 0)
=&gt; heißt erst mal ausprobieren und dann merkern http://www.as400-forum.de/ubb/smile.gif

Fuerchau
23-04-03, 13:48
Wie immer gibt es mehrere Möglichkeiten, jedoch die Funktionen COALESCE, IFNULL und auch VALUE täuschen darüber hinweg, dass tatsächlich KEIN Satz vorhanden ist und nicht vielleicht der Wert 0 (Null) ein korrekter in der Datei B ist.

Beim Fetch gibt man halt für dieses Feld einen Indicator an (MyInd PIC S9(4) COMP-4):

fetch ... :MyField :MyInd, ...

Der Indikator muss ohne Komma direkt hinter dem Feld angegeben werden.

Über die Indicatorabfrage kannst du dann feststellen:
0 = Satz vorhanden und Wert gültig
-1 = Satz vorhanden aber Wert ggf. gekürzt
-2 = NULL (Satz nicht vorhanden)