请看下例:
--测试number的函数
create or replace function test_number return number
is
results number(8,2);
begin
results := 1234.65;
return results;
end;
/
--测试decimal的函数
create or replace function test_decimal return decimal
is
Results decimal(8,2);
begin
Results := 1234.65;
return Results;
end;
/
select test_decimal(),test_number from dual;
--测试结果
TEST_DECIMAL()
--------------
定义变量时,decimal和nmber都指定了相同的格式。但是在返回值上,decimal仅仅是取整(四舍五入了)。
--测试decimal
create or replace function test_decimal return decimal
is
Results
re
begin
Results := 1234.65;
re := Results;
return re;
end;
/
这个测试函数里定义了一个number的变量re,将decimal类型Results的值赋给re
而我用dbms_output.put_line(Results);结果是1234.65。
一点猜测:
这说明最初对Results的赋值是成功的,只是后来使用decimal时,自动将小数后面的都四舍五入了,换成了整数。
这样自然就会导致精度的丢失。所以使用时,建议使用numbe类型。