Announcement

Collapse
No announcement yet.

Interbase SUM numeric overflow

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interbase SUM numeric overflow

    Ich habe ein Problem mit dem SUM-Befehl in Interbase.<BR>
    Das zu summierende Feld ist vom Type NUMERIC(9,2). <BR>
    Interbase ist aber nur in der Lage Summen bis ca. 21.000.000 zu bilden. <BR>
    Zumindest funktioniert es bis 20.978.223,14. Bei einer theoretischen Summe von 21.638.270 steigt mein Programm (Delphi mit IBX), bie IBConsole und auch IBExpert mit "Arithmetic exception, numeric overflow, or string truncation".<BR>
    Ich habe die Seleketionsbereiche auch nach vorne bzw. hinten verschoben. Es kann also nicht mit defekten Datensätzen zusammenhängen.<BR>
    Kurioserweise funktioniert AVG.<BR>
    Hier die SQL-Anweisung und der Query-Plan:
    <PRE>
    SELECT
    SUM(V.GR_GESAMTFLAECHE)
    FROM
    VERTRAGSDATEN V
    WHERE ((V.VERTRAGSDATUM >='23.09.2003') AND (V.VERTRAGSDATUM <='26.11.2003'))

    Plan
    PLAN (V NATURAL)

    Adapted Plan
    PLAN (V NATURAL)

    ------ Performance info ------
    Prepare time = 0ms
    Execute time = 1s 157ms
    Current memory = 3.218.408
    Max memory = 3.557.480
    Memory buffers = 2.048
    Reads from disk to cache = 0
    Writes from cache to disk = 6
    Fetches from cache = 12.779
    </PRE>
    Gibt es tatsächlich eine Beschränkung in Interbase?<BR>
    Kann ich im Select eine Art von Typecast durchführen?<BR>
    <BR>
    Gruß Markus

  • #2
    Hallo Markus,
    <br><br>
    handelt es sich hierbei um eine Dialekt 1 Datenbank? Versuch einfach einmal das SUM auf einen NUMERIC(18, 2) zu casten. Zum Beispiel:
    <pre>
    CAST(SUM(V.GR_GESAMTFLAECHE) AS NUMERIC(18,2))
    </pre>
    Schöne Grüße,<br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hi,

      ein Numeric(9,2) hat 9 signifikante Stellen inkl. der 2 Nachkommastellen, also ist genaugenommen die Zahl 9.999.999,99 die größte Zahl für Numeric(9,2) somit ist 21.000.000 klar darüber. Das es bis 20.???.??? geht liegt wahrscheinlich an der internen Binärdarstellung

      Comment

      Working...
      X