Konu: int / bigint / Numeric(xx.xx)
Belki biliyorsunuz, başıma geldi, paylaşıyorum.
SQL SUM() gibi aggregate fonksiyonları kendi alanında (field) hesaplıyor galiba. SUM(alan1 x alan2) sonucu alan1e sığmıyorsa sonuç için otomatikman büyük alan seçmeyip arithmetic overflow hatası veriyor.
adet 0-2000 arası ve gram 0-3000 arası datayı 5-6 yıl için sorgulamak gerekti;
"Arithmetic overflow error converting expression to data type int." hata mesajı aldım.
hata mesajı:
SELECT SUM(paket_.adet*gram ) AS cfgram .....
SQL çözüm:
SUM(CAST(paket_.adet*gram AS bigint)) AS cfgram
VFP için çözüm:
SUM(CAST(paket_.adet*gram AS numeric(18, 0)))
olmuyor: SELECT CAST(SUM(paket_.adet*gram ) as bigint) AS cfgram .....
önemli:
SQL tarafında bigint VFP tarafında VARTYP()="U" Unknown or variable does not exist olarak dönüyor,
yani çok büyük rakamları hallederken sıkıntılı !
akademik:
bigint: Integer (whole number) data from -2^63 (-9,223,372,036,854,775,808) through 2^63-1 (9,223,372,036,854,775,807). Storage size is 8 bytes.
int: Integer (whole number) data from -2^31 (-2,147,483,648) through 2^31 - 1 (2,147,483,647). Storage size is 4 bytes. The SQL-92 synonym for int is integer.