[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2003
    Beiträge
    3

    Post Konversion von NULL-Werten in SQL-leftJOIN bei deim schreiben

    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

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873

    Post

    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Apr 2003
    Beiträge
    3

    Post

    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


    ......

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287

    Post

    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Apr 2003
    Beiträge
    3

    Post

    danke an alle...
    IFNULL(B.MLSIZE, 0)
    =&gt; heißt erst mal ausprobieren und dann merkern

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    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)
    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

Similar Threads

  1. SQL: Insert bei NULL
    By woki in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 31-10-06, 10:21
  2. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. Sql und Division durch Null
    By Joe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 23-12-05, 07:43
  5. SQL - Problem
    By muadeep in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 27-07-05, 15:17

Berechtigungen

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