[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Thema: NULL und Case

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.753
    Für NULL-Werte benötigt man NULL-Anzeiger.
    Diese dienen nicht nur zum Lesen sondern auch zum schreiben:

    D MyVar 10
    d MyVarNull 5I 0

    if MyVar = *blank;
    MyVarNull = -1; // NULL setzen
    else;
    MyVarNull = 0;
    endif;

    exec sql update mytable
    set MyField = : MyVar : MyVarNull, MyField2 ...
    where ...
    ...;

    Zu beachten ist halt, dass für jede NULL-mögliche Spalte ein NULL-Anzeiger benötigt wird.

    Ansonsten prüfe mal die Tabelle (DSPFFD) ob das Feld tatsächlich NULL erlaubt (ALLOWNULL).
    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

  2. #2
    Registriert seit
    Oct 2003
    Beiträge
    117
    NULL-Anzeiger brauche ich in dem Fall nicht, da ich den NULL-Wert nicht in der Hostvariable brauche.

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich glaube das Problem ist in der Host-Variable zu finden.
    Schreibe mal vor deinem Update
    Code:
    hostvar = ' ';
    Und wenn dann immer noch nicht NULL steht, wäre der SQLSTATE interessant.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.753
    Bitte um Entschuldigung, aber NULL-Anzeiger werden zum korrekten Schreiben wirklich gebraucht.
    Alle anderen Varianten kosten nur Zeit und sind nicht eindeutig zumal BLANK auch nicht NULL ist.

    Deshalb ist der NULL-Anzeiger auch eine eigene Variable und muss im SQL auch separat angegebne werden.
    Deine Hostvariable ist davon unberührt.

    Spätesten wieder beim Lesen benötigst du sinnvollerweise wieder den NULL-Anzeiger, wenn du allerdings beim Select wieder coalesce verwendest kannst du dir das mit dem NULL-Wert auch schenken.
    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

  5. #5
    Registriert seit
    Oct 2003
    Beiträge
    117
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Bitte um Entschuldigung, aber NULL-Anzeiger werden zum korrekten Schreiben wirklich gebraucht.
    Alle anderen Varianten kosten nur Zeit und sind nicht eindeutig zumal BLANK auch nicht NULL ist.

    Deshalb ist der NULL-Anzeiger auch eine eigene Variable und muss im SQL auch separat angegebne werden.
    Deine Hostvariable ist davon unberührt.

    Spätesten wieder beim Lesen benötigst du sinnvollerweise wieder den NULL-Anzeiger, wenn du allerdings beim Select wieder coalesce verwendest kannst du dir das mit dem NULL-Wert auch schenken.
    Du merkst sicher, dass ich kein Freund von NULL-Anzeigern bin ;-). Bisher sind wir immer ohne ausgekommen. Beim Lesen verwenden wir coalesce.

  6. #6
    Registriert seit
    Oct 2003
    Beiträge
    117
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Ich glaube das Problem ist in der Host-Variable zu finden.
    Schreibe mal vor deinem Update
    Code:
    hostvar = ' ';
    Und wenn dann immer noch nicht NULL steht, wäre der SQLSTATE interessant.
    Hat leider nichts gebracht.
    Habe zwischenzeitlich die Hostvariable komplett rausgenommen:

    Code:
    exec sql update Tabelle
                 set    Spalte =
                        (case
                          when 1=2
                          then 'xx'
                          else NULL
                        end)
                 where  ...;
    Schreibt auch kein NULL. sqlcod und sqlstate sind 0.

  7. #7
    Registriert seit
    Nov 2003
    Beiträge
    2.423
    Woran siehst du, daß da Leerzeichen und nicht NULL reingeschrieben wurden?

  8. #8
    Registriert seit
    Oct 2003
    Beiträge
    117
    Zitat Zitat von Pikachu Beitrag anzeigen
    Woran siehst du, daß da Leerzeichen und nicht NULL reingeschrieben wurden?
    Bei NULL wird ein '-' angezeigt.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.753
    Dann prüfe doch mal deine Where-Klausel und das Ergebnis in SQLER3.
    Wenn SQLER3 = 0 ist, erfolgte nämlich kein Update und SQLCOD ist auch dann 0 wenn kein Satz gefunden wurde.
    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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.753
    Das habe ich befürchtet .
    Ohne coalesce kannst du beim Lesen eben auch den NULL-Wert feststellen denn die Hostvariable wird auch dann initialisiert.

    Wenn ihr (entschuldige) so einen Blödsinn programmiert, warum dann überhaupt NULL-Werte ?
    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

  11. #11
    Registriert seit
    Oct 2003
    Beiträge
    117
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Das habe ich befürchtet .
    Ohne coalesce kannst du beim Lesen eben auch den NULL-Wert feststellen denn die Hostvariable wird auch dann initialisiert.

    Wenn ihr (entschuldige) so einen Blödsinn programmiert, warum dann überhaupt NULL-Werte ?
    Wir sind erfolgreich von DDS/RPG auf SQL/ILE umgestiegen bzw. sind auch noch dabei. Blödsinn ist meiner Meinung nach, bei DDS zu bleiben ;-).

    Zu NULL-Werten: Warum soll ich etwas speichern, wenn nichts da ist? Aber das ist eine andere Diskussion.

    Wir schreiben an zig Stellen NULL-Werte weg, überall funktioniert es. Nur hier eben nicht. Wenn die Lösung einfach wäre, hätte ich's nicht posten müssen.

    Mir wurde hier schon oft geholfen, auch von Dir.
    Deshalb hoffe ich einfach, dass jemand ein ähnliches Phänomen schon einmal hatte.

  12. #12
    Registriert seit
    Oct 2003
    Beiträge
    117
    Bin einen kleinen Schritt weiter.

    Ich habe noch eine NULLABLE-Spalte in der gleichen Tabelle, Datentyp Timestamp. Für die Spalte habe ich den Update analog gebaut.

    Das Ergebnis: Er schreibt 0001-01-01 00:00:00.000000, initialisiert also nur und setzt nicht NULL.

    Das passt auch zum vorherigen Fall. Da ist die Spalte char. Dort inititialisiert er also auch nur mit Leerzeichen und setzt nicht NULL.

    Jetzt stellt sich aber immer noch die Frage, warum das NULL innerhalb der case-Anweisung ignoriert wird?

Similar Threads

  1. dynamisches Group by funktioniert nicht
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 24-09-09, 09:31
  2. Darstellung der Null im LPEX-Editor (WDSC)
    By Ewald in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 25-01-07, 08:52
  3. Subselect in case when auf DB2/400
    By Flo4711 in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 29-09-06, 18:31
  4. NOT NULL WITH DEFAULT
    By deni87991 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 04-08-06, 11:32
  5. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 14:47

Berechtigungen

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