DBD-InterBase 0.48 appears to have a bug in converting high-scale data. You can work around it by explicitly CAST()ing your "faulty" column in your VIEW definition to something like NUMERIC(18, 5)
I filed this as rt.cpan #55841. In my tests, any NUMERIC/DECIMAL with a scale >= 10 is corrupted:
This prints:#! /usr/bin/perl # perl t.pl dbi:InterBase:dbname=... user pass use DBI; use strict; use warnings; my $dbh = DBI->connect(@ARGV[0..2], {RaiseError => 1}); for my $scale (1 .. 17) { my $cast = "CAST(19 AS NUMERIC(18, $scale))"; my ($r) = $dbh->selectrow_array("select $cast FROM rdb\$databa +se"); print "$cast ...... $r\n"; }
CAST(19 AS NUMERIC(18, 1)) ...... 19 CAST(19 AS NUMERIC(18, 2)) ...... 19 CAST(19 AS NUMERIC(18, 3)) ...... 19 CAST(19 AS NUMERIC(18, 4)) ...... 19 CAST(19 AS NUMERIC(18, 5)) ...... 19 CAST(19 AS NUMERIC(18, 6)) ...... 19 CAST(19 AS NUMERIC(18, 7)) ...... 19 CAST(19 AS NUMERIC(18, 8)) ...... 19 CAST(19 AS NUMERIC(18, 9)) ...... 19 CAST(19 AS NUMERIC(18, 10)) ...... -88.1021438976 CAST(19 AS NUMERIC(18, 11)) ...... -884.01624455168 CAST(19 AS NUMERIC(18, 12)) ...... -8847.001212166144 CAST(19 AS NUMERIC(18, 13)) ...... -88475.0001384243200 CAST(19 AS NUMERIC(18, 14)) ...... -884756.00000957530112 CAST(19 AS NUMERIC(18, 15)) ...... -8847564.000000985366528 CAST(19 AS NUMERIC(18, 16)) ...... -88475644.0000001263730688 CAST(19 AS NUMERIC(18, 17)) ...... -884756445.00000001899888640
In reply to Re: Wrong calculation result with data retrieved with DBD::InterBase from view
by pilcrow
in thread Wrong calculation result with data retrieved with DBD::InterBase from view
by stefbv
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |