SP'de arithmetic exception, numeric overflow, or ...hatası

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

SP'de arithmetic exception, numeric overflow, or ...hatası

Mesaj gönderen aLonE CoDeR »

Selamlar.

Kod: Tümünü seç

CREATE PROCEDURE SP_STOCKSTATE (
    ICODE VARCHAR(20))
RETURNS (
    VTAKETRANSPIECE Numeric(10, 6),
    VTAKETRANSTOTAL Numeric(10, 6),
    VSALETRANSTOTAL Numeric(10, 6),
    VSALETRANSPIECE Numeric(10, 6),
    REMAINDERPIECE Numeric(10, 6),
    REMAINDERTOTAL Numeric(10, 6)
AS
begin
  Select Coalesce(Sum(Piece), 0), Coalesce(Sum (Total),0)
    from STOCKTRANS
    where TransType = 0 and Code = :ICode
    into :VTakeTransPiece, :VTakeTransTotal;

  Select Coalesce(Sum(Piece), 0), Coalesce(Sum(Total), 0)
    from STOCKTRANS
    where TransType = 1 and Code = :ICode
    into :VSaleTransPiece, :VSaleTransTotal;

    RemainderPiece = VTakeTransPiece-VSaleTransPiece;
    RemainderTotal = VTakeTransTotal-VSaleTransTotal;
  suspend;
end
Bu procedurenin de dahil olduğu veritabanımızın IBExpert ve IBO ile MetaDatasını alıp IBScript bileşeni ile yeni veritabanımızı oluşturuyoruz.Bağlantı sağlanıyor, veri girişi yapılıyor ve bir yerde bu SP'nin çalışması gerekiyor.Çalıştırdığımızda ise 335544321 nolu arithmetic exception...diye devam karakter uyuşmazlığı hatasını alıyoruz.İşin garibi aynı SP'yi, IBExpertle, herhangi bir değişiklik yapmadan tekrar commit ettiğimizde sorun düzeliyor.Cast ile tip dönüşümü yapıyoruz yine aynı sorun...Nedir bu işin hikayesi :roll:

Not : FB 2 kullanmaktayız..

Teşekkürler...
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Re: SP'de arithmetic exception, numeric overflow, or ...hata

Mesaj gönderen Terminator »

bLue aLonE yazdı:Selamlar.

Kod: Tümünü seç

CREATE PROCEDURE SP_STOCKSTATE (
    ICODE VARCHAR(20))
RETURNS (
    VTAKETRANSPIECE Numeric(10, 6),
    VTAKETRANSTOTAL Numeric(10, 6),
    VSALETRANSTOTAL Numeric(10, 6),
    VSALETRANSPIECE Numeric(10, 6),
    REMAINDERPIECE Numeric(10, 6),
    REMAINDERTOTAL Numeric(10, 6)
AS
begin
  Select Coalesce(Sum(Piece), 0), Coalesce(Sum (Total),0)
    from STOCKTRANS
    where TransType = 0 and Code = :ICode
    into :VTakeTransPiece, :VTakeTransTotal;

  Select Coalesce(Sum(Piece), 0), Coalesce(Sum(Total), 0)
    from STOCKTRANS
    where TransType = 1 and Code = :ICode
    into :VSaleTransPiece, :VSaleTransTotal;

    RemainderPiece = VTakeTransPiece-VSaleTransPiece;
    RemainderTotal = VTakeTransTotal-VSaleTransTotal;
  suspend;
end
Bu procedurenin de dahil olduğu veritabanımızın IBExpert ve IBO ile MetaDatasını alıp IBScript bileşeni ile yeni veritabanımızı oluşturuyoruz.Bağlantı sağlanıyor, veri girişi yapılıyor ve bir yerde bu SP'nin çalışması gerekiyor.Çalıştırdığımızda ise 335544321 nolu arithmetic exception...diye devam karakter uyuşmazlığı hatasını alıyoruz.İşin garibi aynı SP'yi, IBExpertle, herhangi bir değişiklik yapmadan tekrar commit ettiğimizde sorun düzeliyor.Cast ile tip dönüşümü yapıyoruz yine aynı sorun...Nedir bu işin hikayesi :roll:

Teşekkürler...
umarım 10,6 formatındaki sayılar arasındaki işlem sonuçlarını matematiksel olarak biliyorsundur.
(10,6) ya daha büyük bir sayı atarsan(total? price?) ne olur?
(10,6) * (10,6) = (?,?)
(10,6) / (10,6) = (?,?)
(10,6) + (10,6) = (?,?)
(10,6) * (10,6) = (?,?)

buna benzer bir hata karakter seti kullanımındaki dikkatsizliklerde de oluyor ama senin böyle bir işlemin yok procedurede.
ibexperte gelince, ibexpert SP debug edebilme amacıyla lokal SP interpreti kullanır.
Firebird Foundation Member #208
http://www.firebirdsql.org
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Öncelikle cevap için teşekkürler..

Dönen sonuçların en büyüğü 1,271.000000 şeklinde..Double Precision şeklinde de denedim, değişiklik olmadı.Scriptin executive edilmesi aşamasında yapmamız gereken, gözden kaçan bişey mi var diye düşünüyorum.Ve daha da ilginç olan şey ise, daha kompleks SP'ler sorunsuz çalışırken bu ve buna benzer birkaç SP'de hata vermesi.IBExpert'in trial sürümünü indirip DeBug ettik, sorunsuz return ediyor.İlginç..

Tekrar teşekkürler..
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Şimdi aynı işlem için bir View yazdım, sorunsuz çalışıyor...
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

aldığın hata sadece sayısal alanlardan dolayı olmayabilir. ICODE değişkeni acaba belirttiğinden büyük bir değer alıyor olabirlir mi?

hata kodunun açıklaması;

Kod: Tümünü seç

335544321=arithmetic exception, numeric overflow, or string truncation
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

ICode inputuna verilen değerler;

'ELMA', '0021', 'VGA', 'ARMUT' vs...ICode yerine tablodan Code (VarChar 20) select edip yazınca da değişen birşey olmuyor, aynı hatayı alıyorum..
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Pardon, düzelme ve özür, View'de de aynı hatayı verdi, sorun bizim scriptten kaynaklanıyor sanırım ama çözemedim :roll:
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

bLue aLonE yazdı:Pardon, düzelme ve özür, View'de de aynı hatayı verdi, sorun bizim scriptten kaynaklanıyor sanırım ama çözemedim :roll:
VT dosyanın default character seti nedir? türkçe karakteri içerecek şekilde değilse ve sen
procedure türkçe karakter bişeyler gönderirsen de aynı şey olabilir.
sum alıyorsun aldığın sumlar 10,6 yı geçmiyor mu?
selectleri /* içine alınca da aynı sorun oluşuyor mu? oluşuyorsa karakter uyuşmazlıgı, oluşmuyorsa matematik işlem taşması var demektir.
Firebird Foundation Member #208
http://www.firebirdsql.org
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Sorgu sonuçlarında 1,271.000000 şeklinde görünen değer IBExpertten tablo kayıtlarına baktığımızda 1,271.0000000000002 olarak görünüyor.Sorun bu mu diycem ama Cast kullandık yine değişmedi.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Unutmuşum yazmayı. Character Set Türkçe...
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

peki o selectleri tek tek ibexpertten çalıştırınca nasıl sonuçlar çıkıyor?

sen bize orjinal SP yi göstermiyorsun sanırım, çünkü bize yazdığı SP zaten çalışmaz, returns ün parantezi kapatılmamış bile.
Firebird Foundation Member #208
http://www.firebirdsql.org
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Projenin bulunduğu makinada nete çıkış yok, testin yapıldığı bi makinadan paste ettim, önceki halinde returns değerleri Double Precision'du değiştirerek deniyorum mecburen.Dolayısıyla returnsları sonradan düzelttim.Normal select çekince hata yok, çalışıyor.Şimdi birşey gözümüze çarptı, biz 10,6 olarak tanımlıyoruz, returns ya da tablo datalarına baktığımızda Title hintlerde 18, 6 olarak görünüyor..
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

BDE komponentleri kullanıyorsan BDEAdmin ayarlarının VT'ye uygun olması gerekiyor.

İyi çalışmalar.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Hayır, IBX bileşenlerini kullanıyoruz, aslında sorunun biri de bu, bug dolu componentler..
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Kullandığın IBDatabase'in Character Set'i VT'ninki ile aynı mı?
Her ikisinin Character Set'ini de belirtebilir misin?

İyi çalışmalar.
Cevapla