[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    35

    SQL: NULL als Ergebnis bei vielen Nachkommastellen

    Hallo zusammen,

    ich habe folgendes Phänomen:
    Bei der Multiplikation von Feldern mit sehr vielen Nachkommastellen erhalte ich im SQL-Editor kein Ergebnis.

    Zur Veranschaulichung:

    Wenn ich dieses SQL (unter Grün) abschicke, bekomme ich richtiger Weise 8 als Ergebnis zurück:
    SELECT 2.0000000000 * 2.0000000000 * 2.0000000000 as Ergebnis
    FROM Tabelle

    Wenn ich jetzt noch eine 0 ergänze, bekomme ich NULL als Ergebnis zurück:
    SELECT 2.0000000000 * 2.0000000000 * 2.00000000000 as Ergebnis
    FROM Tabelle

    Nächster Effekt:
    SELECT 50.0000000000000 * 20.00000000000000
    from tabelle
    -> funktioniert

    Jetzt eine Nachkommastelle dazu:
    SELECT 50.00000000000000 * 20.00000000000000
    from tabelle
    -> NULL

    Jetzt wieder das gleich SQL von oben:
    SELECT 50.0000000000000 * 20.00000000000000
    from tabelle
    -> auch NULL

    SQL beenden, neu starten, gleiches SQL -> funktioniert

    Man kann sehen, dass das Ergebnisfeld mit 27 Nachkommastellen noch ausgegeben wird, bei 28 ist wohl bei diesem Beispiel Schluss. Und das Ergebnisfeld wird nicht wieder verkleinert, wenn ich eine 0 wieder weg nehme, sondern erst, wenn ich die Session schließe. Alternativ muss ich viele Nachkommastellen entfernen, dann geht es wieder.

    Hat noch jemand dieses Phänomen, oder gar eine Lösung dafür?

    Betriebssystem ist übrigens 6.1


    Gruß
    Markus

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Habs grade mal in 7.1 versucht,
    reagiert identisch

    it's not a trick, it's a feature

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,

    habs bei 6.1 und 7.1 probiert und der erste Effekt tritt auch bei mir auf.
    Den zweiten Effekt konnte ich jedoch nicht nachvollziehen.
    Wenn ich mit F9 den zuvor korrekten ausgegebenen Select wieder hole, wird wieder die Abfrage korrekt ausgegebenen.
    Vielleicht hast du eventuell nicht mit F9 die Abfrage geholt, sondern einfach nur hineinkopiert ohne die bestehende zeile mit den Nullen vorher zu löschen?

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Versuch mal folgendes, je nachdem in welcher Umgebung Du das aufrufst:
    1. iSeries Navigator --> Verbindung --> JDBC --> Dezimal Länge und Nachkommastellen auf 63 stellen. (funktioniert bei mir sogar auf V5R4).
    2. Emedded SQL oder SQL Programmierung -->über ein SET OPTION-Statement Option DECRESULT
    3. Im STRSQL kann man das soweit ich gesehen habe nicht setzen.

    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

  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Wenn du im STRSQL die Werte vorher mit CAST definierst, funktioniert es auch.
    Code:
    SELECT cast (50.0000000000000000000 as dec (35, 30)) * cast
    (20.00000000000000000000 as dec (35, 30))                  
    from sysibm.sysdummy1

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    Bei großen Ergebnis/Zwischenfeldern war schon immer ein Cast erforderlich:

    dec( dec(Wert1, n1, m1) * dec(Wert2, n2, m3), nE, mE)

    Ggf. "round(Erg, m)" nicht vergessen, sonst wird abgeschnitten.
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    35
    Okay, ich dachte schon, ich wäre zu blöde für ein einfaches Sql. Dann werde ich daraus mal eine "Casting-Show" machen.

    @andreaspr@aon.at: Ich habe das SQL mit F9 wieder geholt, aber mit diesem Effekt kann ich gut leben, da zum Einen das Problem mit einem Cast ja weg ist und zum Anderen ich im "richtigen Leben" Felder multipliziere, welche sich nicht mal eben in der Größe ändern.

    @B.Hauser: Ich bin immer noch gerne im guten, alten STRSQL unterwegs. Den gleichen Effekt konnte ich im Surveyer auch feststellen und daher habe ich dann andere Editoren nicht mehr versucht.

    Vielen Dank für die schnellen Antworten und ein schönes Wochenende!

    Markus

Similar Threads

  1. SQL: Insert bei NULL
    By woki in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 31-10-06, 10:21
  2. Wirres SQL Ergebnis
    By lyrics in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-08-06, 12:10
  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

Tags for this Thread

Berechtigungen

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