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

Thema: NULL und Case

Hybrid View

  1. #1
    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.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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

  4. #4
    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.

  5. #5
    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?

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Und wenn du die gleiche SQL-Anweisung im STRSQL ausführst (natürlich mit den gleichen Werten wie in den Hostvars und der Where...) wird ein NULL geschrieben??

    Das klingt für mich schon sehr mystisch.

    Führe mal dein Programm im Debug aus und setze einen Breakpoint gleich direkt nach der UPDATE-Anweisung.
    Schau dann nach dem Update in der Tabelle nach ob ein NULL drinnen steht. Danach lass das PGM zu ende laufen.

    Entweder hast du wirklich noch irgendwo was (Default-Values in der Tabelle, Trigger, andere Programme die zusätzlich ausfgeführt werden etc.) oder das ist ein Bug.

  7. #7
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Ist vielleicht irgendeine spezielle Compiler-Anweisung oder H-Definition bezüglich NULL-Werten für dieses Programm angegeben?

  8. #8
    Registriert seit
    Oct 2003
    Beiträge
    117
    Schonmal danke an alle für's Miträtseln.

    RPG können wir denke ich außen vor lassen.
    Es wird auch initialisiert bzw. *loval gesetzt statt NULL, wenn ich in der SQL-Konsole des navigators oder auch in einer SQL-Sitzung auf der i5 einen sql-update absetze, z.B.:

    Code:
    update tabelle
                 set    spalte =
                            case 1
                             when 1
                             then NULL
                             else 'xx' 
                            end
                 where  ID = 1;
    Noch ein Hinweis:
    Ein insert mit analoger Syntax funktioniert:

    Code:
                 insert into tabelle (
                                 spalte)
    
                       values (case 1
                                  when 1
                                  then NULL
                                 else
                                  'xx'
                                 end );

  9. #9
    Registriert seit
    Oct 2003
    Beiträge
    117
    Zitat Zitat von Fuerchau Beitrag anzeigen
    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.
    Alles gute Ideen, aber das Update passiert. In der Tabelle ist eine Spalte "Zeitmarke für Zeilenänderung". Da schreibt die Datenbank automatisch den Timestamp, wenn der Datensatz geändert wurde.

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Irgendwo muss deine Logik da noch falsch sein. Gibts da vielleicht noch einen Trigger?
    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
    Irgendwo muss deine Logik da noch falsch sein. Gibts da vielleicht noch einen Trigger?
    Trigger gibt es hier keine, ist eine neue Tabelle ohne zugehörige Objekte.

  12. #12
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Funktioniert denn das?

    update tabelle set spalte =
    case 1 when 1 then NULL else NULL end

Similar Threads

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

Berechtigungen

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