Domanda

Ho avuto un problema nel mio database qui, io uso Firebird 1.5.3 e funziona bene fino a quando noe di leggere o scrivere in modo normale, ma quando ho eseguito una procedura, ho ottenuto risultati riga vuota e il seguente messaggio:

eccezione aritmetica, numerico troppo pieno, o una stringa troncamento.

Codice SQL: -802 IB Numero errore: 335544321

Così ho confrontato con il mio db di backup di un mese fa, ha funzionato bene, ottengo i dati in righe. Per assicurare il mio codice cambiamento non era, mi copia incolla sia procedimento a WinMerge (di confronto diff), ma niente di differente. Per assicurare il mio errore è venuto dai dati, corro la mia procedura per la vecchia transazione datata (dati 1 anno di età), ancora ricevo coloro messaggio.

I controllare la logica aritmethic nel procedimento, la modifica, ma senza fortuna. Qualcuno può aiutare con questo?

Thx un mazzo,

È stato utile?

Soluzione

Dopo un lungo tracciato nel codice e dati, ho trovato l'ostacolo che in qualche modo mi bugging fuori. C'è stato un cambiamento in un master data, che ora ha carattere longger (varchar). Nel mio procedimento è stato messo in una dimensione più piccola di varchar, diciamo 10 carattere. Mentre la sua nuova stringa su 15. Qui va l'errore ... o stringa di troncamento .... . Ma comunque grazie della vostra attenzione al mio problema e grazie per gli indizi che hai scritto, è save me in qualche modo, mi danno l'idea di tracciare in su.

Thx un mazzo,

Altri suggerimenti

comportamento diverso (in dB di backup e uno dal vivo) con esattamente gli stessi dati è strano. Forse qualche altra procedura o trigger viene rovinare con la query nel db dal vivo.

Dato che si dice che non è possibile pubblicare il codice qui, ti suggerisco di qualcosa che si può cercare di eliminare alcune altre possibilità.

"overflow numerico o troncamento della stringa." è l'errore che si ottiene.

  • La query ha SUM() o altro Funzione aggegate?
  • Ha qualche stringa di funzione di manipolazione?

Se sì su una di queste, tenta di rimuovere qualsiasi parte, uno per uno, ed eseguire la query modificata. Così si possono avvistare quale parte della query genera l'errore.


Nota: Same struttura db, stessi dati e stessa query fare non sempre produrre gli stessi risultati a causa delle funzioni non deterministiche come NOW() e RAND(). Se si utilizzano i risultati di queste funzioni in ulteriori calcoli, quindi errori di aritmetica come divisione per 0 o overflow o altri tipi di errori possono verificarsi in una corsa e non in un altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top